Некоторое время назад я писал приложение на c++/Qt, которое отправляло по сети большие объемы данных в формате JSON. Использовался стандартный QJsonDocument. При внедрении столкнулся с низкой производительностью, а также неудобным дизайном классов, который не позволял нормально детектировать ошибки при работе. В результат появилась библиотека JsonWriterSax, позволяющая писать JSON документы в SAX стиле с высокой скоростью, которую и публикую на github.com под лицензией MIT. Кому интересно — прошу под кат.  JSON (JavaScript Object Notation) — структуированный текстовый формат данных, разработанный Дугласом Крокфордом и являющийся подмножеством языка ECMAScript (на его основе созданы JavaScript, JScript и др.). JSON пришел на смену XML, расширяя возможности вложенности и добавляя типы данных. В настоящее время является активно применяется в интернете. Но в JSON имеются и недостатки. На мой взгляд среди стандартных типов явно не хватает типа DateTime — приходится передавать значение в виде числа или строки, а при разборе принимать решение уже в зависимости от контекста. Но стоит отметить, что и в ECMAScript тип Date создавался давно, не был продуман, и в мире js для работы с датами используют сторонние библиотеки.так же Для парсинга и создания структуированных документов имеется 2 основных подхода — SAX и DOM. Они появились еще для XML, но могут использоваться как паттерны и для создания обработчиков других форматов.  Используется для последовательной обработки данных и позволяет обрабатывать большие документы в потоке. При чтении возвращает приложению информацию о найденном элементе или ошибке, но сохранение информации и контроль вложенности лежит на самом приложении. При записи обычно указываются шаги в стиле: начать элемент, начать суб-элемент, записать число, записать строку, закрыть суб-элемент, закрыть элемент. К недостаткам можно отнести то, что от программиста требуется тщательнее писать код, лучше понимать структуру документа и отсутствие или крайняя ограниченность по редактированию существующего документа.  При данном способе в памяти строится дерево документа, которое может сериализоваться, десериализоваться и изменяться. Основной недостаток — это высокий расход память и увеличение времени обработки. Под капотом обычно используется SAX обработчик. Стандартный QJsonDocument использует DOM подход. При создании документа скорость невысока — можно посмотреть бенчмарки в конце статьи. Но самой большой проблемой для меня оказался непродуманный дизайн возврата ошибки.  В данном примере при нехватке памяти запишется в поток ошибок сообщение  QJson: Document too large to store in data structure 
и данные перестанут добавляться. В случае с массивом можно проверять условие Но что делать при работе с объектом? Постоянно проверять, что новый ключ добавился? Парсить лог в поисках ошибки? Библиотека JsonWriterSax позволяет писать JSON документ в QTextStream в SAX стиле и доступна на github по лицензии MIT. Контроль за памятью возлагается на приложение. Библиотека контролирует целостность JSON — при некорректном добавлении элемента функция записи вернет ошибку. Для контроля используется КС-грамматика. Были написаны тесты, но возможно какой-то кейс остался без внимания. Если кто-то зафиксирует некорректную работу проверки и сообщит для исправления ошибки — буду очень благодарен. Считаю, что лучшее описание библиотеки для программиста — пример кода =) В результате получим В результате получим Использовался QBENCHMARK при release-сборке. Функциональность реализована в классе JsonWriterSaxTest. В последующих версиях планирую добавить возможность описывать формат пользовательских данных через lambda-функции с помощью с QVariant, добавить возможность использовать разделители для форматирования документа (pretty document) и возможно, если сообщество заинтересуется, добавлю SAX парсер. Кстати для нахождения ошибки переполнения мне помогла моя библиотека, позволяющая для qInfo(), qDebug(), qWarning() задавать формат и выводить в стиле модуля Python logging. Данную библиотеку так же планирую выложить в opensource — если кто заинтересовался — пишите в комментариях. Fullstack developer