Tiny-json adalah json parser yang serba guna dan mudah digunakan ditulis dalam C dan cocok untuk sistem tertanam. Ini cepat, kuat dan portabel.
Ini bukan hanya tokenizer. Anda dapat mengakses data JSON dalam format string atau mendapatkan nilai primitif secara langsung sebagai variabel tipe C tanpa kehilangan kinerja.
Anda dapat mengakses JSON Fields satu lawan satu atau mendapatkan nilainya dengan nama mereka. Ini membantu Anda menyimpan banyak baris kode sumber dan waktu pengembangan.
Jika Anda perlu membuat string JSON, silakan kunjungi: https://github.com/rafagafe/json-maker
Saat mem -parsing string teks JSON, pohon dibuat dengan menghubungkan struktur JSON_T. Menavigasi atau meminta pohon ini sangat mudah menggunakan API yang disediakan.
Untuk mempertahankan penggunaan memori yang berkurang dan pemrosesan cepat string tidak disalin. Saat Anda meminta nilai elemen JSON, referensi ke string JSON asli dikembalikan.
Untuk memfasilitasi pemrosesan data, string yang dikembalikan diakhiri nol. Ini dicapai dengan mengatur karakter nol ke karakter kontrol JSON seperti koma, kurung, kawat gigi, dan tanda kutip.
API Tiny-Json menyediakan dua jenis. jsonType_t adalah enumerasi untuk semua jenis bidang JSON yang mungkin. json_t adalah struktur yang berisi data internal yang tidak perlu Anda ketahui.
typedef enum {
JSON_OBJ , JSON_ARRAY , JSON_TEXT , JSON_BOOLEAN ,
JSON_INTEGER , JSON_REAL , JSON_NULL
} jsonType_t ; Untuk menguraikan string JSON Gunakan json_create() . Kami melewatkannya json_t untuk mengalokasikan bidang JSON. Jika string JSON diformat buruk atau memiliki lebih banyak bidang daripada array fungsi ini mengembalikan pointer nol.
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 ; Untuk mendapatkan bidang dengan namanya, kami menggunakan json_getProperty() . Jika bidang tidak ada fungsi mengembalikan pointer nol. Untuk mendapatkan jenis bidang, kami menggunakan 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 ; Untuk mendapatkan nilai bidang dalam format string kami menggunakan json_getValue() . Itu selalu mengembalikan string null yang valid.
char const * namevalue = json_getValue ( namefield );
printf ( "%s%s%s" , "Name: '" , namevalue , "'.n" ); Untuk bidang primitif kita dapat menggunakan fungsi tertentu untuk mendapatkan nilai bidang secara langsung sebagai tipe C, fi json_getInteger() atau kita dapat menggunakan json_getValue() untuk mendapatkan nilainya dalam format teks.
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" );Sebagai contoh cara menggunakan objek dan array JSON bersarang, silakan lihat contoh-01.c.