Tiny-Json是用C編寫的多功能且易於使用的JSON解析器,適用於嵌入式系統。它是快速,健壯且便攜的。
它不僅是一個令牌機。您可以以字符串格式訪問JSON數據,也可以直接作為C類型變量獲取原始值,而不會丟失性能。
您可以一對一訪問JSON字段或通過其名稱獲得其值。這可以幫助您節省大量源代碼線和開發時間。
如果您需要創建JSON字符串,請訪問:https://github.com/rafagafe/json-maker
解析JSON文本字符串時,通過鏈接JSON_T結構創建樹。使用所提供的API導航或查詢這棵樹非常容易。
為了保持減少的內存使用情況和快速處理,未復製字符串。當您請求JSON元素的值時,將返回對原始JSON字符串的引用。
為了促進數據的處理,返回的字符串被無效。這是通過將空字符設置為JSON控製字符(例如逗號,括號,括號和引號)來實現的。
Tiny-Json API提供兩種類型。 jsonType_t是所有可能的JSON字段類型的枚舉。 json_t是一種包含您不需要知道的內部數據的結構。
typedef enum {
JSON_OBJ , JSON_ARRAY , JSON_TEXT , JSON_BOOLEAN ,
JSON_INTEGER , JSON_REAL , JSON_NULL
} jsonType_t ;解析JSON字符串使用json_create() 。我們將其傳遞給了一系列json_t ,以分配JSON字段。如果JSON字符串形成不良或具有比數組更多的字段,則該功能返回空指針。
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 ;要獲取名稱的字段,我們使用json_getProperty() 。如果該字段不存在,則該函數將返回空指針。要獲取字段的類型,我們使用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 ;為了獲得字符串格式的字段值,我們使用json_getValue() 。它始終返回有效的null被殺死的字符串。
char const * namevalue = json_getValue ( namefield );
printf ( "%s%s%s" , "Name: '" , namevalue , "'.n" );對於原始字段,我們可以使用特定函數將字段值直接作為C類型,即fi json_getInteger() ,也可以使用json_getValue()以文本格式獲取其值。
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" );有關如何使用嵌套JSON對象和數組的示例,請參見示例-01.c。