Tiny-Json es un analizador JSON versátil y fácil de usar escrito en C y adecuado para sistemas integrados. Es rápido, robusto y portátil.
No es solo un tokenizador. Puede acceder a los datos JSON en formato de cadena o obtener valores primitivos directamente como variables de tipo C sin ninguna pérdida de rendimiento.
Puede acceder a los campos JSON uno a uno o obtener sus valores por sus nombres. Esto le ayuda a ahorrar muchas líneas de código fuente y tiempo de desarrollo.
Si necesita crear cadenas JSON, visite: https://github.com/rafagafe/json-maker
Al analizar una cadena de texto JSON, se crea un árbol vinculando las estructuras JSON_T. Navegar o consultar este árbol es muy fácil usando la API proporcionada.
Para mantener un uso reducido de la memoria y el procesamiento rápido, las cadenas no se copian. Cuando solicita el valor de un elemento JSON, se devuelve una referencia a la cadena JSON original.
Para facilitar el procesamiento de los datos, las cadenas devueltas están terminadas en nula. Esto se logra estableciendo el personaje nulo en personajes de control JSON como comas, soportes, aparatos ortopédicos y comillas.
La API Tiny-Json proporciona dos tipos. jsonType_t es una enumeración para todos los tipos de campo JSON posibles. json_t es una estructura que contiene datos internos que no necesita saber.
typedef enum {
JSON_OBJ , JSON_ARRAY , JSON_TEXT , JSON_BOOLEAN ,
JSON_INTEGER , JSON_REAL , JSON_NULL
} jsonType_t ; Para analizar una cadena JSON, use json_create() . Lo aprobamos una variedad de json_t para que asigne JSON Fields. Si la cadena JSON está formada por mala forma o tiene más campos que la matriz, esta función devuelve un puntero 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 obtener un campo por su nombre, usamos json_getProperty() . Si el campo no existe, la función devuelve un puntero nulo. Para obtener el 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 obtener el valor de un campo en formato de cadena, usamos json_getValue() . Siempre devuelve una cadena válida de nulo.
char const * namevalue = json_getValue ( namefield );
printf ( "%s%s%s" , "Name: '" , namevalue , "'.n" ); Para los campos primitivos podemos usar una función específica para obtener el valor de los campos directamente como tipo C, fi json_getInteger() o podemos usar json_getValue() para obtener su valor en 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 obtener un ejemplo de cómo usar objetos JSON anidados y matrices, consulte Ejemplo-01.C.