一、c语言获取json中的数据。
1、先要有cJOSN库,两个文件分别是cJSON.c和cJSON.h。
2、感性认识
char * json = "{ \"json\" : { \"id\":1,\"nodeId\":11,\"deviceId\":111,\"deviceName\":\"aaa\",\"ieee\":\"01212\",\"ep\":\"1111\",\"type\":\"bbb\" }}"; char * json1 = "{\"id\":1,\"deviceName\":\"aaa\"}"; cJSON * root; cJSON * format; int value_int; char * value_string; root = cJSON_Parse(json); format = cJSON_GetObjectItem(root,"json"); value_int = cJSON_GetObjectItem(format,"nodeId")->valueint; value_string = cJSON_GetObjectItem(format,"ieee")->valuestring; printf( "%d\n",value_int ); printf( "%s\n",value_string ); cJSON_Delete(root); root = cJSON_Parse(json1); value_int = cJSON_GetObjectItem(root,"id")->valueint; value_string = cJSON_GetObjectItem(root,"deviceName")->valuestring; printf( "%d\n",value_string ); cJSON_Delete(root);
结果:
11 01212 1 aaa
二、cJSON库
1、json的数据结构
c语言中json数据是采用链表存储的
typedef struct cJSON {
struct cJSON *next,*prev;// 数组 对象数据中用到
struct cJSON *child;// 数组 和对象中指向子数组对象或值
int type;// 元素的类型,如是对象还是数组
char *valuestring;// 如果是字符串
int valueint; // 如果是数值
double valuedouble;// 如果类型是cJSON_Number
char *string;// The item's name string,if this item is the child of,or is in the list of subitems of an object.
} cJSON;
三、cJSON使用
{
"name": "Jack (\"Bee\") Nimble",
"format": {
"type": "rect",
"width": 1920,
"height": 1080,
"interlace": false,
"frame rate": 24
}
}
"name": "Jack (\"Bee\") Nimble",
"format": {
"type": "rect",
"width": 1920,
"height": 1080,
"interlace": false,
"frame rate": 24
}
}
1、字符串解析成json结构体
1):讲字符串解析成json结构体。
cJSON *root = cJSON_Parse(my_json_string);
2):获取某个元素
cJSON *format = cJSON_GetObjectItem(root,"format");
int framerate = cJSON_GetObjectItem(format,"frame rate")->valueint;
int framerate = cJSON_GetObjectItem(format,"frame rate")->valueint;
3):讲json结构体转换成字符串
char *rendered=cJSON_Print(root);
4):删除
cJSON_Delete(root);
2:构建一个json结构体
cJSON *root,*fmt;
root=cJSON_CreateObject();
cJSON_AddItemToObject(root,"name",cJSON_CreateString("Jack (\"Bee\") Nimble"));
cJSON_AddItemToObject(root,"format",fmt=cJSON_CreateObject());
cJSON_AddStringToObject(fmt,"type","rect");
cJSON_AddNumberToObject(fmt,"width",1920);
cJSON_AddNumberToObject(fmt,"height",1080);
cJSON_AddFalseToObject (fmt,"interlace");
cJSON_AddNumberToObject(fmt,"frame rate",24)
out =cJSON_Print(root);
printf("%s\n",out);
cJSON_Delete(root);
free(out);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。