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

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

原文 http://blog.csdn.net/bjbz_cxy/article/details/79173603

2018-01-27 02:00:48阅读(194)

为什么选择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 <stdio.h>
#include <cJSON.h>
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);
}











最新发布

CentOS专题

关于本站

5ibc.net旗下博客站精品博文小部分原创、大部分从互联网收集整理。尊重作者版权、传播精品博文,让更多编程爱好者知晓!

小提示

按 Ctrl+D 键,
把本文加入收藏夹