json是以下格式的数据
{
"奔驰": {
"factory": "一汽大众",
"last": 31,
"price": 83,
"sell": 49,
"sum": 80,
"other": [123, 1, "hello, world", {
"梅斯德斯奔驰": "心所向, 持以恒"
}]
}
}
每一层都对应一个key和value
下面展示如何使用cJson开源工具包创建一个json格式的数据。
#include
#include
#include "cJSON.h"
int main()
{
// 创建对象
cJSON* obj = cJSON_CreateObject();
// 创建子对象
cJSON* subObj = cJSON_CreateObject();
// 添加key-value
cJSON_AddItemToObject(subObj, "factory", cJSON_CreateString("一汽大众"));
cJSON_AddItemToObject(subObj,"last",cJSON_CreateNumber(31));
cJSON_AddItemToObject(subObj,"price",cJSON_CreateNumber(83));
cJSON_AddItemToObject(subObj,"sell",cJSON_CreateNumber(49));
cJSON_AddItemToObject(subObj,"sum",cJSON_CreateNumber(80));
// 创建一个json数组
cJSON* array = cJSON_CreateArray();
cJSON_AddItemToArray(array,cJSON_CreateNumber(123));
cJSON_AddItemToArray(array,cJSON_CreateNumber(1));
cJSON_AddItemToArray(array,cJSON_CreateString("hello, world"));
// 数组中的对象
cJSON* subsub= cJSON_CreateObject();
cJSON_AddItemToObject(subsub,"梅斯德斯奔驰",cJSON_CreateString("心所向, 持以恒"));
cJSON_AddItemToObject(subObj,"other",array);
// obj 中添加key_value
cJSON_AddItemToObject(obj,"奔驰", subObj);
// 数据格式化
char* data = cJSON_Print(obj);
FILE *fp = fopen("car.json","w");
fwrite(data,sizeof(char),strlen(data)+1,fp);
fclose(fp);
return 0;
}
使用的时候只需要3个文件,cJSON.h, cJSON.c 和所用文件,
编译命令 ,-lm 表示需要链接数学库
gcc create.c cJSON.c -o create -lm
下面的代码读取一个json文件并完成解析
#include
#include
#include "cJSON.h"
int main()
{
FILE* fp = fopen("car.json", "r");
char buf[1024] = {0};
fread(buf, 1, sizeof(buf), fp);
cJSON* root = cJSON_Parse(buf);
cJSON* subobj = cJSON_GetObjectItem(root,"奔驰");
if(subobj){
// 获取子对象
cJSON* fasctory = cJSON_GetObjectItem(subobj,"factory");
cJSON* last = cJSON_GetObjectItem(subobj,"last");
cJSON* price = cJSON_GetObjectItem(subobj, "price");
cJSON* sell = cJSON_GetObjectItem(subobj,"sell");
cJSON* sum = cJSON_GetObjectItem(subobj,"sum");
cJSON* other = cJSON_GetObjectItem(subobj,"other");
// 打印value的值
printf("奔驰: \n");
printf(" factor: %s\n",cJSON_pRINT(fasctory));
printf(" last: %s\n",cJSON_pRINT(last));
printf(" price: %s\n",cJSON_pRINT(price));
printf(" sell: %s\n",cJSON_pRINT(sell));
printf(" sum: %s\n",cJSON_pRINT(sum));
// 打印数组内容
printf(" other:\n");
if(other->type == cJSON_Array){
for(int i=0;itype == cJSON_String){
printf(" %s \n",node->valuestring);
}
if(node->type == cJSON_Number){
printf(" %s \n",node->valueint);
}
if(node->type == cJSON_True){
printf(" %s \n",node->valueint);
}
if(node->type == cJSON_False){
printf(" %s \n",node->valueint);
}
}
}
cJSON_Delete(root);
fclose(fp);
}
}