CJSON读取使用
1.查看json文件大小
char *cfg_file = "./aaa.json"
struct stat json_size;
stat(cfg_file, &json_size);
FILE *json_fd = fopen(cfg_file, "r");
if(NULL == json_fd){
printf("%s open fail\n", cfg_file);
return -1;
}
2.json文件读取到堆区
char *json_buf = malloc(json_size.st_size + 1);
memset(json_buf, 0, sizeof(json_buf));
fread(json_buf, json_size.st_size, 1, json_fd);
fclose(json_fd);
3.解析json
CJSON *root = cJSON_Parse(json_buf);
4.查询对象
CJSON *cjson_Item = cJSON_GetObjectItem(root, "name");//查询"name"对象后的内容
if(NULL == cjson_Item){
printf("not find ");
return -1;
}
通过返回的CJSON *值针可以查看查询到的内容
CJSON结构体成员 | 存储的类型 |
---|---|
cjson_Item->valuestring | 字符串 %s |
cjson_Item->valueint | 整形 %d |
cjson_Item->valuedouble | 浮点数 %f |
5.查询数组成员
CJSON *cjson_arry = cJSON_GetObjectItem(root, "work_path");
if(NULL == cjson_arry){
printf("not find\n");
return -1;
}
int array_size = cJSON_GetArraySize(cjson_arry);
CJSON *cjson_arry_item;
for(i = 0; i < array_size; i++){
cjson_arry_item = cJSON_GetArrayItem(cjson_arry, i);
printf("cjson_arry_item :%s \n",cjson_arry_item->valuestring );
}
6.销毁解析内容
cJSON_Delete(root);
创建CJSON
代码示例
#include <stdio.h>
#include <malloc.h>
#include <stdio.h>
#include <string.h>
#include "cJSON.h"
int main(void)
{
cJSON *cjson_test = NULL;
cJSON *cjson_address = NULL;
cJSON *cjson_skill = NULL;
char *str = NULL;
/* 创建一个JSON数据对象(链表头结点) */
cjson_test = cJSON_CreateObject();
/* 添加一条字符串类型的JSON数据(添加一个链表节点) */
cJSON_AddStringToObject(cjson_test, "name", "mculover666");
/* 添加一条整数类型的JSON数据(添加一个链表节点) */
cJSON_AddNumberToObject(cjson_test, "age", 22);
/* 添加一条浮点类型的JSON数据(添加一个链表节点) */
cJSON_AddNumberToObject(cjson_test, "weight", 55.5);
/* 添加一个嵌套的JSON数据(添加一个链表节点) */
cjson_address = cJSON_CreateObject();
cJSON_AddStringToObject(cjson_address, "country", "China");
cJSON_AddNumberToObject(cjson_address, "zip-code", 111111);
cJSON_AddItemToObject(cjson_test, "address", cjson_address);
/* 添加一个数组类型的JSON数据(添加一个链表节点) */
cjson_skill = cJSON_CreateArray();
cJSON_AddItemToArray(cjson_skill, cJSON_CreateString( "C" ));
cJSON_AddItemToArray(cjson_skill, cJSON_CreateString( "Java" ));
cJSON_AddItemToArray(cjson_skill, cJSON_CreateString( "Python" ));
cJSON_AddItemToObject(cjson_test, "skill", cjson_skill);
/* 添加一个值为 False 的布尔类型的JSON数据(添加一个链表节点) */
cJSON_AddFalseToObject(cjson_test, "student");
/* 打印JSON对象(整条链表)的所有数据 */
str = cJSON_Print(cjson_test);
printf("%s\n", str);
return 0;
}
生成JSON
{
"name": "mculover666",
"age": 22,
"weight": 55.5,
"address": {
"country": "China",
"zip-code": 111111
},
"skill": ["C", "Java", "Python"],
"student": false
}