Как стать автором
Обновить

Комментарии 19

Использую много лет rapidjson — очень быстрая и стабильная библиотека.
По поводу бенчмарков — есть такой проект Native JSON Benchmark. Можете добавить туда свою библиотеку и сравнить с другими (на данный момент — 41 библиотека).
А «много лет» это сколько, если у них релиз версии 1.0.0 состоялся 22 Apr 2015?

Использую Yajl 2.1.0, и, судя по тестам, зря я его выбрал.
Rapidjson появилася в ноябре 2011 на Google Code
Хорошая ссылка для предварительной оценки. Но нужно смотреть на контекст использования. Например, если нужно быстро прочитать большой JSON, изменить пару полей и сохранить — это одна история, а вотJSON-RPC совершенно другая.
НЛО прилетело и опубликовало эту надпись здесь
Очень интересное изложение.
о котором я расскажу в следующей статье совсем скоро

Будет очень интересно еще раз окунуться в такое же повествование.
сказал человеку спасибо, огрёб минус, абидна и непанятна :(
Было бы интересно добавить в ваше сравнение и jsmn (только десериализация). Говорят, что он чудовищно быстр.
В maxood выше привел ссылку на проект бенчмарков JSON. Сравнивать все варианты использования всех библиотек (кому то нужен DOM, только парсер или наоборот, быстрый сериализатор) в разных контекстах задача не благодарная. Ну а на счет чудовищной быстроты — это надо конкретно смотреть. Есть хитропопые товарищи которые умудряются свести время десериализации к нулю, а по факту оказывается, что десериализация происходит позже, при обращении к полям

jsmn быстр, потому что это не парсер, а лексер. Он даже escape последовательности не преобразует.

Очень точно сказано, там по первому же примеру видно как он работает, но не смог подобрать нужное слово. В wjson есть конструкция, которая позволяет сделать примерно тоже самое:
  std::string json="\"Привет мир!\"";
  typedef std::pair<std::string::iterator, std::string::iterator> range_t;
  range_t value;
  wjson::iterator_pair<range_t>::serializer()( value, json.begin(), json.end(), 0 );

Здесь value, получает итераторы на начало и конец JSON элемента во входном буфере (для строки вместе с кавычками). Разумеется это будет работать и с массивами и объектами.
Сделайте, пожалуйста, подписи к горизонтальным осям графиков. Хотя бы по принципу «Чем больше, тем хуже».
Для всех графиков «Чем больше, тем хуже». Мне показалось, что из контекста понятно, но видимо был не прав. Сейчас я не буду исправлять, но в следующий раз обращу на оформление графиков больше внимания. Спасибо.
На первый взгляд, ваша my_atoi() неверно обрабатывает числа вида +123 и 0123
Цифры с нулем 0123 в JSON запрещены
Очень интересная статья, спасибо.

Если использовать Вашу библиотеку для сериализации структур, можно ли указать в для некоторых (целочисленных) полей default-значения, которые необязательно выгружать в json?
Хороший вопрос который показывает несовершенство дизайна wjson о котором я написал в заключении. Достаточно легко написать сериализатор для новых типов данных, но вот со всевозможными restrictions будут проблемы.Если вы сделаете вариант wjson::value с указанием значения, при котором сериализация не требуется, то получите что-то типа:
{"value":,}
Сериализатор для своего варианта wjson::member не предусмотрен, а сериализация мемберов вшита в сериализатор wjson::object. В вашем случае нужно реализовать свой сериализатор для wjson::object. Если посмотрите исходник, то увидите перегрузки для wjson::member, wjson::member_p и wjson::member_if. Простое добавление перегрузки для вашего варианта сериализации не сработает, т.к. в результате можете получить что-то типа
{,"value":0}
Нужно немного подправить код в месте, где записывается ','
Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

Публикации

Истории