1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/hominsu-neujson

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
README_zh.md 17 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Отправлено 12.03.2025 11:17 0efcb7b

Коллабораторы Репозитории Звезды Проблемы Лицензия Выпуск


Переводы: Английский | Упрощённый китайский

Введение

neujson — это парсер и генератор JSON на C++. Он поддерживает как API стиля SAX, так и стиля DOM.

Установка

Клонировать исходный код neujson

git clone https://github.com/hominsu/neujson.git
```### Компиляция и установка

Далее приведены команды для локальной компиляции и установки neujson:

```bash
cd neujson
mkdir -p cmake/build
pushd cmake/build
cmake ../..
make -j
make install
popd

Если у вас нет прав доступа к каталогу установки, используйте sudo:

sudo make install

Вместо сборки примеров программы

Исходный код примеров уже включен в исходный код neujson. Вы уже клонировали исходный код в предыдущем шаге, поэтому вам просто нужно будет добавить один параметр cmake:

cmake -DNEUJSON_BUILD_EXAMPLES=ON ../..

Вместо сборки бенчмарков

Для сборки бенчмарков вам потребуется использовать git submodule, чтобы получить внешние зависимости, а затем вы должны будете выбрать соответствующую ветку и добавить параметр cmake для сборки бенчмарков:

git submodule update --init --recursive
pushd cmake/build
cmake -DNEUJSON_BUILD_BENCHMARK=ON ../..
...

Установка

Чтобы удалить neujson, используйте следующие команды:

pushd cmake/build
make uninstall
popd

Если у вас нет прав доступа к каталогу установки, используйте sudo:

sudo make uninstall

Пример использования

Этот простой пример демонстрирует парсинг JSON строки в объект DOM, выполнение простых изменений в этом объекте и последующее преобразование этого объекта обратно в JSON строку.

#include <cstdio>

#include "neujson/document.h"
#include "neujson/string_write_stream.h"
#include "neujson/writer.h"
#include "sample.h"

int main() {
  // 1. Парсим JSON строку в DOM.
  neujson::Document doc;
  if (auto const err = doc.Parse(kSample[0]); err != neujson::error::OK) {
    puts(neujson::ParseErrorStr(err));
    return EXIT_FAILURE;
  }
```  // 2. Изменяем его с помощью DOM.
  auto& s = doc[0]["Longitude"];
  s.SetDouble(s.GetDouble() + 100.0);

  // 3. Преобразуем DOM в строку
  neujson::StringWriteStream os;
  neujson::Writer writer(os);
  doc.WriteTo(writer);

  // Вывод
  fprintf(stdout, "%.*s", static_cast<int>(os.get().size()), os.get().c_str());
  return 0;
}

Вывод:

[
    {
        "precision": "zip",
        "Latitude": 37.7668,
        "Longitude": -22.3959,
        "Address": "",
        "City": "SAN FRANCISCO",
        "State": "CA",
        "Zip": "94107",
        "Country": "US"
    },
    {
        "precision": "zip",
        "Latitude": 37.371991,
        "Longitude": -122.02602,
        "Address": "",
        "City": "SUNNYVALE",
        "State": "CA",
        "Zip": "94085",
        "Country": "US"
    }
]

Бенчмарк производительности

Бенчмарки производительности основаны на google benchmark

JSON данные

Файл JSON Размер Описание
canada.jsonисточник 2199КБ Контур границы Канады в формате GeoJSON; содержит большое количество вещественных чисел.
citm_catalog.jsonисточник 1737КБ Большой тестовый файл с отступами для бенчмарка нескольких Java JSON-парсеров.

Пример результатовНиже приведены результаты, полученные с использованием MacBook Air (M1, 2020) и Apple clang 13. 1. 6```bash

Запущено на (8 x 24. 1212 МГц процессора) CPU Кэши: L1 Данные 64 КиБ (x8) L1 Инструкция 128 КиБ (x8) L2 Общий 4096 КиБ (x2) Среднее значение загрузки: 2. 04, 1. 78, 1. 74

Benchmark Время Процессор Итерации

BM_neujson_read_parse/citm_catalog.json 7. 04 мс 7. 04 мс 72 BM_nlohmann_read_parse/citm_catalog.json 10. 6 мс 10. 6 мс 66 BM_rapidjson_read_parse/citm_catalog.json 2. 96 мс 2. 96 мс 236 BM_neujson_read_parse_write_file/citm_catalog.json 7. 92 мс 7. 92 мс 88 BM_nlohmann_read_parse_write_file/citm_catalog.json 12. 5 мс 12. 5 мс 56 BM_rapidjson_read_parse_write_file/citm_catalog.json 4. 10 мс 4. 10 мс 170 BM_neujson_read_parse_write_string/citm_catalog.json 8. 03 мс 8. 03 мс 87 BM_nlohmann_read_parse_write_string/citm_catalog.json 12. 7 мс 12. 7 мс 55 BM_rapidjson_read_parse_write_string/citm_catalog.json 3. 90 мс 3. 90 мс 180 BM_neujson_read_parse_pretty_write_file/citm_catalog.json 8. 84 мс 8. 84 мс 79 BM_nlohmann_read_parse_pretty_write_file/citm_catalog.json 13. 3 мс 13. 3 мс 53 BM_rapidjson_read_parse_pretty_write_file/citm_catalog.json 4. 56 мс 4. 55 мс 154 BM_neujson_read_parse_pretty_write_string/citm_catalog.json 9. 44 мс 9. 44 мс 72 BM_nlohmann_read_parse_pretty_write_string/citm_catalog.json 14. 2 мс 14. 2 мс 50 BM_rapidjson_read_parse_pretty_write_string/citm_catalog.json 4. 19 мс 4. 19 мс 167

BM_neujson_read_parse/canada.json                                    31.  6 мс         31.  6 мс           22
BM_nlohmann_read_parse/canada.json                                   39.  1 мс         39.  1 мс           18
BM_rapidjson_read_parse/canada.json                                  3.  38 мс         3.  38 мс          207
BM_neujson_read_parse_write_file/canada.json                         68.  2 мс        68.  2 мс            10
BM_nlohmann_read_parse_write_file/канада. json                       47.  6 мс        47.  6 мс            15
BM_rapidjson_read_parse_write_file/канада. json                      12.  5 мс        12.  5 мс            55
BM_neujson_read_parse_write_string/канада. json                      69.  4 мс        69.  4 мс            10
BM_nlohmann_read_parse_write_string/канада. json                     48.  5 мс        48.  5 мс            14
BM_rapidjson_read_parse_write_string/канада. json                    10.  7 мс        10.  7 мс            63
BM_neujson_read_parse_pretty_write_file/канада. json                 72.  3 мс        72.  3 мс            10
BM_nlohmann_read_parse_pretty_write_file/канада. json                51.  2 мс        51.  2 мс            14
BM_rapidjson_read_parse_pretty_write_file/канада. json               13.  7 мс        13.  7 мс            51
BM_neujson_read_parse_pretty_write_string/канада. json               75.  9 мс        75.  9 мс             9
BM_nlohmann_read_parse_pretty_write_string/канада. json              55.  0 мс        55.  0 мс            13
BM_rapidjson_read_parse_pretty_write_string/канада. json             12.  4 мс        12.  4 мс            56
```

Ниже приведены результаты, полученные с использованием процессора i5-9500, системы CentOS-8-Stream и компилятора gcc 8. 5. 0 (Red Hat 8. 5. 0-10).

Запущено на (6 X 4166.  48 МГц процессора)

CPU Кэши:

L1 Данные 32 КБ (x6)  
L1 Инструкция 32 КБ (x6)  
L2 Общий 256 КБ (x6)  
L3 Общий 9216 КБ (x1)

Среднее значение загрузки: 0.  80, 0.  52, 0.  45
--------------------------------------------------------------------------------------------------------
```Benchmark                                                              Время             Процессор       Итерации
--------------------------------------------------------------------------------------------------------
BM_neujson_read_parse/citm_catalog.json                                8.59 мс           8.58 мс            74
BM_nlohmann_read_parse/citm_catalog.json                               14.7 мс           14.6 мс            48
BM_rapidjson_read_parse/citm_catalog.json                              2.38 мс           2.37 мс           293
BM_neujson_read_parse_write_file/citm_catalog.json                     10.1 мс           10.1 мс            70
BM_nlohmann_read_parse_write_file/citm_catalog.json                    17.5 мс           17.5 мс            40
BM_rapidjson_read_parse_write_file/citm_catalog.json                   3.39 мс           3.39 мс           206
BM_neujson_read_parse_write_string/citm_catalog.json                   10.9 мс           10.9 мс            65
BM_nlohmann_read_parse_write_string/citm_catalog.json                  17.5 мс           17.5 мс            40
BM_rapidjson_read_parse_write_string/citm_catalog.json                 3.20 мс           3.19 мс           218
BM_neujson_read_parse_pretty_write_file/citm_catalog.json              11.3 мс           11.3 мс            60
BM_nlohmann_read_parse_pretty_write_file/citm_catalog.json             18.8 мс           18.7 мс            38
BM_rapidjson_read_parse_pretty_write_file/citm_catalog.json            3.70 мс           3.69 мс           189
BM_neujson_read_parse_pretty_write_string/citm_catalog.json            14.5 мс           14.5 мс            49
BM_nlohmann_read_parse_pretty_write_string/citm_catalog.json           18.5 мс           18.5 мс            38
BM_rapidjson_read_parse_pretty_write_string/citm_catalog.json          3.57 мс           3.57 мс           196
BM_neujson_read_parse/canada.json                                       27.8 мс           27.7 мс            25
BM_nlohmann_read_parse/canada.json                                      41.8 мс           41.8 мс            17
BM_rapidjson_read_parse/canada.json                                     4.59 мс           4.58 мс           152
```
BM_neujson_read_parse_write_file/канада.json                           100 мс            100 мс             7
```BM_nlohmann_read_parse_write_file/канада.json                        53,5 мс         53,4 мс           13
BM_rapidjson_read_parse_write_file/канада.json                       13,6 мс         13,6 мс           51
BM_neujson_read_parse_write_string/канада.json                        106 мс          106 мс            7
BM_nlohmann_read_parse_write_string/канада.json                      53,3 мс         53,3 мс           13
BM_rapidjson_read_parse_write_string/канада.json                     11,9 мс         11,9 мс           58
BM_neujson_read_parse_pretty_write_file/канада.json                   106 мс          106 мс            7
BM_nlohmann_read_parse_pretty_write_file/канада.json                 58,6 мс         58,6 мс           12
BM_rapidjson_read_parse_pretty_write_file/канада.json                14,4 мс         14,4 мс           49
BM_neujson_read_parse_pretty_write_string/канада.json                 119 мс          119 мс            6
BM_nlohmann_read_parse_pretty_write_string/канада.json               64,9 мс         64,8 мс           11
BM_rapidjson_read_parse_pretty_write_string/канада.json              12,8 мс         12,8 мс           54
```## Примеры использования```[РapidJSON](https://github.com/Tencent/rapidjson): Быстрый парсер/генератор JSON для C++ с API в стиле SAX/DOM.

## Благодарности

![Логотип JetBrains](https://resources.jetbrains.com/storage/products/company/brand/logos/jb_beam.svg)

Особая благодарность [JetBrains](https://www.jetbrains.com/) за предоставление бесплатной лицензии `All Products Pack` для этого открытого проекта

## Вкладчики ✨

Большое спасибо этим замечательным людям ([ключ эмодзи](https://allcontributors.org/docs/en/emoji-key)):

<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->
<!-- prettier-ignore-start -->
<!-- markdownlint-disable -->
<table>
  <tr>
    <td align="center"><a href="https://homing.so"><img src="https://avatars.githubusercontent.com/u/14991225?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Homing So</b></sub></a><br /><a href="https://github.com/hominsu/neujson/commits?author=hominsu" title="Код">💻</a> <a href="https://github.com/hominsu/neujson/commits?author=hominsu" title="Документация">📖</a> <a href="#design-hominsu" title="Проектирование">🎨</a> <a href="#example-hominsu" title="Примеры">💡</a> <a href="#infra-hominsu" title="Инфраструктура (хостинг, средства сборки и т.д.)">🚇</a> <a href="#platform-hominsu" title="Упаковка/перенос на новую платформу">📦</a> <a href="https://github.com/hominsu/neujson/commits?author=hominsu" title="Тестирование">⚠️</a></td>
  </tr>
</table>

<!-- markdownlint-restore -->
<!-- prettier-ignore-end -->

<!-- ALL-CONTRIBUTORS-LIST:END -->

Этот проект следует спецификации [all-contributors](https://github.com/all-contributors/all-contributors). Любые формы вклада приветствуются!

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/hominsu-neujson.git
git@api.gitlife.ru:oschina-mirror/hominsu-neujson.git
oschina-mirror
hominsu-neujson
hominsu-neujson
main