Подтвердить что ты не робот

Самый быстрый читатель/писатель JSON для С++

Мне нужен парсер и писатель С++ JSON. Скорость и надежность очень важны, мне все равно, хорош ли интерфейс или нет, если он основан на Boost или нет, даже парсер C отлично (если он значительно быстрее, чем С++).

Если у кого-то есть опыт со скоростью доступных парсеров JSON, пожалуйста, сообщите нам.

4b9b3361

Ответ 1

http://lloyd.github.com/yajl/

http://www.digip.org/jansson/

Не знаю, как они сравниваются по скорости, но первая выглядит как правильная идея для масштабирования действительно больших данных JSON, поскольку она анализирует только небольшой кусок за раз, поэтому им не нужно держать все данные в памяти сразу (это может быть быстрее или медленнее в зависимости от библиотеки/варианта использования)

Ответ 2

rapidjson - это синтаксический анализатор/генератор С++ JSON, предназначенный для быстрой и малой занимаемой памяти.

Существует сравнение с YAJL и JsonCPP.


Update:

Я создал проект с открытым исходным кодом Исходный тест JSON, который оценивает 29 (и увеличивая) библиотеки C/С++ JSON с точки зрения соответствия и представление. Это должно быть полезной ссылкой.

Ответ 3

https://github.com/quartzjer/js0n

Углестный интерфейс возможен, но делает то, что вы просите. Нулевые распределения.

http://zserge.com/jsmn.html Другой подход с нулевым распределением.

Решения, размещенные выше всех, занимают динамическое распределение памяти, поэтому в какой-то момент они неизбежно оказываются более медленными, в зависимости от структуры данных, и будут опасны включать в среду с ограниченным кучей, например встроенную систему.

Тесты vjson, rapidjson и sajson здесь: http://chadaustin.me/2013/01/json-parser-benchmarking/, если вас интересует такая вещь.

И чтобы ответить на вашу "авторскую" часть вопроса, я сомневаюсь, что вы могли бы выиграть эффективный

printf("{%s:%s}",name,value)

с любой библиотекой - при условии, что сама реализация printf/sprintf является легким, конечно.

EDIT: на самом деле позвольте мне отвести это назад, RapidJson позволяет распределять по стеку только через свой MemoryPoolAllocator и фактически делает это по умолчанию для своего GenericReader. Я не сделал сравнения, но я ожидал бы, что он будет более надежным, чем все, что перечислено здесь. Он также не имеет каких-либо зависимостей, и он не бросает исключения, которые, вероятно, делают его в конечном счете подходящим для встроенных. Полностью основанный на заголовке lib, поэтому его легко включить в любом месте.