c语言使用cJSON解析JSON字符串_1获取JSON字段值

2018-01-27 10:27:19来源:网络收集作者:纳米程序员人点击

分享

为什么选择cJSON来解析JSON字符串?因为简洁又简单,而且效率又快,cJSON工程文件也非常简单,仅一个.c文件和一个.h文件!


且文件体积大小不到30k,源代码思路也非常清晰,也非常适合研究。


点我下载cJSON


当我们下载好cJSON只需要把.c和.h文件包含文件拷贝到我们工程目录下,并将头文件和实现文件包含进来就可以使用了!


cJSON使用数据结构链表的方式来存储js对象。



ypedef struct cJSON {  //cJSON结构体



       struct cJSON*next,*prev;           /* 遍历数组或对象链的前向或后向链表指针*/



       struct cJSON *child;                   /*数组或对象的孩子节点*/



       int type;                                     /* key的类型*/



       char *valuestring;                       /*字符串值*/



       int valueint;                                /* 整数值*/



       double valuedouble;                    /* 浮点数值*/



       char *string;                               /* key的名字*/



} cJSON;




正所谓万丈高楼平地起,先从最简单的开始,后面会详细全面的介绍cJSON的其他函数作用!



先来介绍两个个常用的cJSON函数:



cJSON *cJSON_Parse(const char *value)



作用:将一个JSON数据包,按照cJSON结构体的结构序列化整个数据包,并在堆中开辟一块内存存储cJSON结构体



返回值:成功返回一个指向内存块中的cJSON的指针,失败返回NULL




cJSON *cJSON_GetObjectItem(cJSON *object,const char *string)



作用:获取JSON字符串字段值



返回值:成功返回一个指向cJSON类型的结构体指针,失败返回NULL




假如说有这样的一个JSON字符串




{
 "test_1":"0"
 "test_2":"1"
 "test_3":"2"
}


  //json_string



这是最简单的JSON字符串



我们首先要先将这个字符串打包成cJSON数据格式



cJSON* cjson = cJSON_Parse(json_string);



最后依次获取json字符串中的每个字段的值并打印输出



//cJSON_GetObjectltem返回的是一个cJSON结构体所以我们可以通过函数返回结构体的方式选择返回类型!



char* test_1_string = cJSON_GetObjectltem(cjson,"test_1")->valuestring;





char* test_2_string = cJSON_GetObjectltem(cjson,"test_2")->valuestring;



char* test_3_string = cJSON_GetObjectltem(cjson,"test_3")->valuestring;



//打印输出:



printf("%s",*test_1_string);



printf("%s",*test_2_string);



printf("%s",*test_3_stiring);




完整代码:




#include
#include
int main(){
char* json_string =/
//用char* 模拟一个JSON字符串
"{"/
"test_1":"0"/
"test_2":"1"/
"test_3":"2"/
"}";
//JSON字符串到cJSON格式
cJSON* cjson = cJSON_Parse(json_string);
//获取字段值
//cJSON_GetObjectltem返回的是一个cJSON结构体所以我们可以通过函数返回结构体的方式选择返回类型!
char* test_1_string = cJSON_GetObjectltem(cjson,"test_1")->valuestring;
char* test_2_string = cJSON_GetObjectltem(cjson,"test_2")->valuestring;
char* test_3_string = cJSON_GetObjectltem(cjson,"test_3")->valuestring;
//打印输出
printf("%s",*test_1_string);
printf("%s",*test_2_string);
printf("%s",*test_3_stiring);
}







最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台