Tiny-JSON est un analyseur JSON polyvalent et facile à utiliser écrit en C et adapté aux systèmes intégrés. Il est rapide, robuste et portable.
Ce n'est pas seulement un jetons. Vous pouvez accéder aux données JSON sous forme de chaîne ou obtenir directement des valeurs primitives sous forme de variables de type C sans aucune perte de performances.
Vous pouvez accéder aux champs JSON un sur un ou obtenir leurs valeurs par leurs noms. Cela vous aide à économiser beaucoup de lignes de code source et de temps de développement.
Si vous devez créer des chaînes JSON, veuillez visiter: https://github.com/rafagafe/json-maker
Lors de l'analyse d'une chaîne de texte JSON, une arborescence est créée en liant les structures JSON_T. La navigation ou l'interrogation de cet arbre est très facile à l'aide de l'API fournie.
Pour maintenir une utilisation réduite de la mémoire et un traitement rapide, les chaînes ne sont pas copiées. Lorsque vous demandez la valeur d'un élément JSON, une référence à la chaîne JSON d'origine est renvoyée.
Pour faciliter le traitement des données, les chaînes retournées sont terminées par nul. Ceci est réalisé en définissant le caractère nul sur des caractères de contrôle JSON tels que des virgules, des supports, des accolades et des guillemets.
L'API Tiny-Json fournit deux types. jsonType_t est une énumération pour tous les types de champs JSON possibles. json_t est une structure contenant des données internes que vous n'avez pas besoin de savoir.
typedef enum {
JSON_OBJ , JSON_ARRAY , JSON_TEXT , JSON_BOOLEAN ,
JSON_INTEGER , JSON_REAL , JSON_NULL
} jsonType_t ; Pour analyser une chaîne JSON, utilisez json_create() . Nous passons un tableau de json_t pour allouer JSON Fields. Si la chaîne JSON est mauvaise ou a plus de champs que le tableau, cette fonction renvoie un pointeur nul.
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 ; Pour obtenir un champ par son nom, nous utilisons json_getProperty() . Si le champ n'existe pas, la fonction renvoie un pointeur nul. Pour obtenir le type de champ, nous utilisons 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 ; Pour obtenir la valeur d'un champ au format de chaîne, nous utilisons json_getValue() . Il renvoie toujours une chaîne d'éminée nulle valide.
char const * namevalue = json_getValue ( namefield );
printf ( "%s%s%s" , "Name: '" , namevalue , "'.n" ); Pour les champs primitifs, nous pouvons utiliser une fonction spécifique pour obtenir la valeur des champs directement en tant que type C, fi json_getInteger() ou nous pouvons utiliser json_getValue() pour obtenir sa valeur au format texte.
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" );Pour un exemple, comment utiliser les objets JSON imbriqués et les tableaux, veuillez consulter l'exemple-01.c.