Я пытаюсь найти хороший способ синтаксического анализа JSON в C. Мне действительно не нужна огромная библиотека или что-то еще, я бы предпочел что-то маленькое и легкое с минимальным набором функций, но с хорошей документацией.
Есть ли у кого-нибудь что-нибудь, на что они могут мне указать?
{
,[
,]
,}
,,
,"
, и обратный. Они могут или не могут оставить превращение escape-последовательностей Unicode на ваше усмотрение, они могут оставить вам проверять, находятся ли числа в допустимом диапазоне Unicode и т. Д. Тогда есть основная разница между синтаксическим анализом произвольного JSON на деревья и известного JSON на C структуры.Ответы:
Json - не слишком большой язык для начала, поэтому библиотеки для него, скорее всего, будут небольшими (по крайней мере, чем библиотеки Xml).
Там целая тонна C библиотек связаны в json.org . Может быть, один из них подойдет вам.
источник
cJSON имеет приличный API и небольшой (2 файла, ~ 700 строк). Многие другие парсеры JSON, на которые я смотрел сначала, были огромными ... Я просто хочу разобрать немного JSON.
Изменить: за последние годы мы внесли некоторые улучшения в cJSON.
источник
Jsmn довольно минималистичен и имеет всего две функции для работы.
http://zserge.bitbucket.org/jsmn.html
источник
/* Allows escaped symbol \uXXXX */
...case 'u':
.../* TODO */
NXJSON - это полнофункциональный, но очень маленький (~ 400 строк кода) парсер JSON, который имеет простой в использовании API:
const nx_json* json=nx_json_parse_utf8(code); printf("hello=%s\n", nx_json_get(json, "hello")->text_value); const nx_json* arr=nx_json_get(json, "my-array"); int i; for (i=0; i<arr->length; i++) { const nx_json* item=nx_json_item(arr, i); printf("arr[%d]=(%d) %ld\n", i, (int)item->type, item->int_value); } nx_json_free(json);
источник
Вы можете взглянуть на Янссон
На веб-сайте указано следующее: Jansson - это библиотека C для кодирования, декодирования и управления данными JSON. Особенности:
источник
jsmn
из-за его скорости [1], но он не поддерживает кодирование. Кроме того, Jansson действительно проста в использовании. --- [1] translate.google.it/…Я использовал JSON-C для рабочего проекта и рекомендую его. Легковесный и выпускается с открытым лицензированием.
Документация включена в раздачу. В основном у вас есть
*_add
функции для создания объектов JSON, эквивалентные*_put
функции для освобождения их памяти и служебные функции, которые преобразуют типы и выходные объекты в строковое представление.Лицензирование позволяет включить его в ваш проект. Мы использовали его таким образом, скомпилировав JSON-C как статическую библиотеку, которая связана с основной сборкой. Таким образом, нам не нужно беспокоиться о зависимостях (кроме установки Xcode).
JSON-C также без происшествий построен для нас под OS X (x86 Intel) и Linux (x86 Intel). Если ваш проект должен быть портативным, это хорошее начало.
источник
Вам нужно проанализировать произвольные структуры JSON или просто данные, относящиеся к вашему приложению. В последнем случае вы можете сделать его намного легче и эффективнее, не создавая никакой хэш-таблицы / структуры карты, сопоставляющей ключи JSON со значениями; вместо этого вы можете просто хранить данные непосредственно в полях структуры или в чем-то еще.
источник