Tiny-Json-это универсальный и простой в использовании анализатор JSON, написанный в C и подходит для встроенных систем. Это быстро, надежно и портативно.
Это не только токенизатор. Вы можете получить доступ к данным JSON в формате строкового формата или получить примитивные значения непосредственно в виде переменных типа C без каких -либо потерь производительности.
Вы можете получить доступ к полям JSON один на один или получить их значения по их именам. Это поможет вам сэкономить много строк исходного кода и времени разработки.
Если вам нужно создать строки json, пожалуйста, посетите: https://github.com/rafagafe/json-maker
При анализе текстовой строки JSON создается дерево, связывая структуры json_t. Навигация или запрос этого дерева очень легко с использованием предоставленного API.
Для поддержания уменьшенного использования памяти и быстрой обработки струны не копируются. Когда вы запросите значение элемента JSON, возвращается ссылка на исходную строку JSON.
Чтобы облегчить обработку данных, возвращаемые строки являются нулевыми. Это достигается путем установки нулевого символа для управляющих персонажей JSON, таких как запятые, скобки, скобки и кавычки.
Tiny-Json API предоставляет два типа. jsonType_t - это перечисление для всех возможных типов поля JSON. json_t - это структура, содержащая внутренние данные, которые вам не нужно знать.
typedef enum {
JSON_OBJ , JSON_ARRAY , JSON_TEXT , JSON_BOOLEAN ,
JSON_INTEGER , JSON_REAL , JSON_NULL
} jsonType_t ; Для анализа строки JSON Используйте json_create() . Мы передаем ему массив json_t , чтобы выделить поля JSON. Если строка JSON плохая или имеет больше полей, чем массив, эта функция возвращает нулевый указатель.
enum { MAX_FIELDS = 4 };
json_t pool [ MAX_FIELDS ];
char str [] = "{ "name": "peter", "age": 32 }" ;
json_t const * parent = json_create ( str , pool , MAX_FIELDS );
if ( parent == NULL ) return EXIT_FAILURE ; Чтобы получить поле по его названию, мы используем json_getProperty() . Если поле не существует, функция возвращает нулевый указатель. Чтобы получить тип поля, мы используем json_getType() .
json_t const * namefield = json_getProperty ( parent , "name" );
if ( namefield == NULL ) return EXIT_FAILURE ;
if ( json_getType ( namefield ) != JSON_TEXT ) return EXIT_FAILURE ; Чтобы получить значение поля в формате строки, мы используем json_getValue() . Он всегда возвращает действительную строку с нулевой тему.
char const * namevalue = json_getValue ( namefield );
printf ( "%s%s%s" , "Name: '" , namevalue , "'.n" ); Для примитивных полей мы можем использовать определенную функцию, чтобы получить значение поля непосредственно в качестве типа C, fi json_getInteger() или мы можем использовать json_getValue() чтобы получить его значение в текстовом формате.
json_t const * agefield = json_getProperty ( parent , "age" );
if ( agefield == NULL ) return EXIT_FAILURE ;
if ( json_getType ( agefield ) != JSON_INTEGER ) return EXIT_FAILURE ;
int64_t agevalue = json_getInteger ( agefield );
printf ( "%s%lld%s" , "Age: '" , agevalue , "'.n" );
char const * agetxt = json_getValue ( agefield );
printf ( "%s%s%s" , "Age: '" , agetxt , "'.n" );Для примера, как использовать вложенные объекты и массивы JSON, см. Пример-01.c.