O Tiny-Json é um analisador JSON versátil e fácil de usar escrito em C e adequado para sistemas incorporados. É rápido, robusto e portátil.
Não é apenas um tokenizer. Você pode acessar dados JSON no formato da String ou obter valores primitivos diretamente como variáveis de tipo C sem qualquer perda de desempenho.
Você pode acessar os campos json um a um ou obter seus valores com seus nomes. Isso ajuda você a economizar muitas linhas de código -fonte e tempo de desenvolvimento.
Se você precisar criar Strings JSON, visite: https://github.com/rafagafe/json-maker
Ao analisar uma corda de texto JSON, uma árvore é criada vinculando estruturas JSON_T. Navegar ou consultar esta árvore é muito fácil usando a API fornecida.
Para manter o uso reduzido da memória e o processamento rápido, as strings não são copiadas. Quando você solicita o valor de um elemento JSON, uma referência à string json original é retornada.
Para facilitar o processamento dos dados, as cordas retornadas são terminadas nulas. Isso é conseguido definindo o caractere nulo para caracteres de controle JSON, como vírgulas, suportes, aparelhos e marcas de aspas.
A API Tiny-Json fornece dois tipos. jsonType_t é uma enumeração para todos os tipos de campo JSON possíveis. json_t é uma estrutura que contém dados internos que você não precisa saber.
typedef enum {
JSON_OBJ , JSON_ARRAY , JSON_TEXT , JSON_BOOLEAN ,
JSON_INTEGER , JSON_REAL , JSON_NULL
} jsonType_t ; Para analisar uma string json, use json_create() . Passamos uma variedade de json_t para alocar JSON Fields. Se a sequência JSON for ruim formada ou tiver mais campos do que a matriz, essa função retorna um ponteiro nulo.
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 ; Para obter um campo pelo seu nome, usamos json_getProperty() . Se o campo não existir, a função retornará um ponteiro nulo. Para obter o tipo de campo, usamos 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 ; Para obter o valor de um campo no formato da string, usamos json_getValue() . Ele sempre retorna uma string válida comimada nula.
char const * namevalue = json_getValue ( namefield );
printf ( "%s%s%s" , "Name: '" , namevalue , "'.n" ); Para campos primitivos, podemos usar uma função específica para obter o valor dos campos diretamente como um tipo C, fi json_getInteger() ou podemos usar json_getValue() para obter seu valor no formato de texto.
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" );Para um exemplo de como usar objetos e matrizes JSON aninhados, consulte o Exemplo-01.c.