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。