Tiny-Json ist ein vielseitiger und einfach zu verwendender JSON-Parser, der in C geschrieben und für eingebettete Systeme geeignet ist. Es ist schnell, robust und tragbar.
Es ist nicht nur ein Tokenizer. Sie können im String -Format auf JSON -Daten zugreifen oder primitive Werte direkt als C -Typ Variablen ohne Leistungsverlust abrufen.
Sie können auf die JSON -Fields auf einen zugreifen oder ihre Werte mit ihren Namen erhalten. Dies hilft Ihnen, viele Quellcodezeilen und Entwicklungszeiten zu sparen.
Wenn Sie JSON-Strings erstellen müssen
Beim Parsen einer JSON -Textfolge wird ein Baum erstellt, indem JSON_T -Strukturen verknüpft werden. Das Navigieren oder Abfragen dieses Baumes ist mit der bereitgestellten API sehr einfach.
Um eine verringerte Speicherverwendung und die schnelle Verarbeitung aufrechtzuerhalten, werden die Zeichenfolgen nicht kopiert. Wenn Sie den Wert eines JSON -Elements anfordern, wird ein Verweis auf die ursprüngliche JSON -Zeichenfolge zurückgegeben.
Um die Verarbeitung der Daten zu erleichtern, werden die zurückgegebenen Zeichenfolgen nullterminiert. Dies wird erreicht, indem der Nullcharakter auf JSON -Kontrollfiguren wie Kommas, Klammern, Zahnspangen und Anführungszeichen gesetzt wird.
Die Tiny-Json-API enthält zwei Arten. jsonType_t ist eine Aufzählung für alle möglichen JSON -Feldtypen. json_t ist eine Struktur mit internen Daten, die Sie nicht kennen müssen.
typedef enum {
JSON_OBJ , JSON_ARRAY , JSON_TEXT , JSON_BOOLEAN ,
JSON_INTEGER , JSON_REAL , JSON_NULL
} jsonType_t ; Um eine JSON -String zu analysieren, verwenden Sie json_create() . Wir übergeben es eine Reihe von json_t , damit es JSON -Felder bereitstellt. Wenn die JSON -Zeichenfolge schlecht formiert ist oder über mehr Felder als das Array verfügt, gibt diese Funktion einen Nullzeiger zurück.
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 ; Um ein Feld mit seinem Namen zu erhalten, verwenden wir json_getProperty() . Wenn das Feld nicht existiert, gibt die Funktion einen Nullzeiger zurück. Um den Typ eines Feldes zu erhalten, verwenden wir 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 ; Um den Wert eines Feldes im String -Format zu erhalten, verwenden wir json_getValue() . Es gibt immer eine gültige Null-Teminat-Zeichenfolge zurück.
char const * namevalue = json_getValue ( namefield );
printf ( "%s%s%s" , "Name: '" , namevalue , "'.n" ); Für primitive Felder können wir eine bestimmte Funktion verwenden, um den Felderwert direkt als C -Typ zu erhalten, fi json_getInteger() oder wir können json_getValue() verwenden, um ihren Wert im Textformat zu erhalten.
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" );Ein Beispiel, wie Sie verschachtelte JSON-Objekte und -Arrays verwenden, siehe Beispiel-01.C.