因为自己没回不常用时就会忘特写这边文章进行自己的学习整理,也方便自己以后不用再次查阅
csdn有很多大神自己也是用过他们的博客才慢慢学会的,自己才疏学浅大家多见谅。
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。 易于人阅读和编写。同时也易于机器解析和生成。 它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。 这些特性使JSON成为理想的数据交换语言。
2.1 json数值
注意数值不需要加引号,键值对之间使用“,”
【单个数值】
{“value”:12}
【多个数值】
{“maxValue”:24, “minValue”:12};
2.2 JSON字符串
字符串需要加引号,键值对之间使用”,”。
【单个字符串】
{“name”:”xukai871105”}
【多个字符串】
{“name”:”never疯”, “blog”:”https://blog.csdn.net/qq_40574571“}
3.3 JSON布尔
请注意JSON格式中的值可以使用布尔类型,且不需要加引号,如果true或false被引号包裹,那么便解析为JSON字符串,请处理稍有不同。
{“success”:false}
3.4 JSON数组
{“lists”:[5,6,7,8]};
3.4 JSON嵌套
{
“path”:”D:/Scanner/2017-2018-1/13SC34130901-001”,
“studentlist”:[
{“snum”:”1142310206”,”filename”:”013_SC34130901_1142310206_59.jpg”,”pnum”:2,”name”:”哲儿”},
{“snum”:”1142310206”,”filename”:”013_SC34130901_1142310206_59.jpg”,”pnum”:2,”name”:”哲儿”}
]
}
就是以上格式一定要规范否则在json解析时是会报错的
typedef struct cJSON {
struct cJSON *next,*prev;
struct cJSON *child;
int type;
char *valuestring;
int valueint;
double valuedouble;
char *string;
} cJSON;
在读写前先把json需要的头文件准备好
“cJSON.h”
“cJSON.c”
这个自己去找吧,有很多,我就不提供了
显示一个简单的
#include
#include
#include "cJSON.h"
int main (int argc, const char * argv[])
{
// 创建JSON Object
cJSON *root = cJSON_CreateObject();
// 加入节点(键值对),节点名称为value,节点值为123.4
cJSON_AddNumberToObject(root,"value",123.4);
// 打印JSON数据包
char *out = cJSON_Print(root);
printf("%s\n",out);
// 释放内存
cJSON_Delete(root);
free(out);
return 0;
}
结果
{
"value": 123.4
}
一个我自己做时比较复杂的
#include
#include
#include
#include "cJSON.h"
#include "cJSON.c"
#include
using namespace std;
int main()
{
//创建一个空的文档(对象)
cJSON *json = cJSON_CreateObject();
//向文档中增加一个键值对{"name":"王大锤"}
cJSON_AddItemToObject(json,"name",cJSON_CreateString("王大锤"));
//向文档中添加一个键值对
//cJSON_AddItemToObject(json,"age",cJSON_CreateNumber(29));
cJSON_AddNumberToObject(json,"age",29);
cJSON *array = NULL;
cJSON_AddItemToObject(json,"love",array=cJSON_CreateArray());
cJSON_AddItemToArray(array,cJSON_CreateString("LOL"));
cJSON_AddItemToArray(array,cJSON_CreateString("NBA"));
cJSON_AddItemToArray(array,cJSON_CreateString("Go shopping"));
cJSON_AddNumberToObject(json,"score",59);
cJSON_AddStringToObject(json,"address","beijing");
//将json结构格式化到缓冲区
char *buf = cJSON_Print(json);
//打开文件写入json内容
FILE *fp = fopen("D:\\项目实战\\扫描仪相关\\json\\json生成文件\\jsonsuccess.json","w");
fwrite(buf,strlen(buf),1,fp);
free(buf);
fclose(fp);
//释放json结构所占用的内存
cJSON_Delete(json);
return 0;
}
结果
{
"name": "王大锤",
"age": 29,
"love": ["LOL", "NBA", "Go shopping"],
"score": 59,
"address": "beijing"
}
也是自己做的一个 看时理解着改 一般都没啥问题
文件:
{
"path":"D:/Scanner/2017-2018-1/13SC34130901-001",
"studentlist":[
{"snum":"1142310206","filename":"013_SC34130901_1142310206_59.jpg","pnum":2,"name":"哲儿"},
{"snum":"1142310206","filename":"013_SC34130901_1142310206_59.jpg","pnum":2,"name":"哲儿"}
]
}
代码段:
#include
#include
#include
#include "cJSON.h"
#include "cJSON.c"
#include
#include
using namespace std;
int main()
{
ifstream f;
string read;
char *count;
cJSON *json;//封装后的json对象
f.open("C:\\Users\\hasee\\Desktop\\tmp.json");
while(getline(f,read,'#'))
{
count=&read[0];
cJSON *json_value, *json_timestamp,*url;
json = cJSON_Parse(count);
if(json == NULL)
{
printf("json pack into cjson error...");
}
else //打包成功调用cJSON_Print打印输出
{
cJSON_Print(json);
}
if (!json)
{
printf("Error before: [%s]\n",cJSON_GetErrorPtr());
}
else
{
cout<<"success"<// 解析开关值
json_timestamp = cJSON_GetObjectItem( json, "path");
if( json_timestamp->type == cJSON_String )
{
// valuestring中获得结果
printf("path:%s\r\n",json_timestamp->valuestring);
}
//获取数组对象
url=cJSON_GetObjectItem(json,"studentlist");
//获取数组对象个数
int array_size=cJSON_GetArraySize(url);
//获取数组对象孩子节点
cJSON* arr_item = url->child;
cout<for(int i=0;i <=(array_size-1);++i)
{
//cJSON_Print函数可以打印根数据项,加入制表符换行符等标识符使得JSON数据包更易阅读
cJSON_Print(cJSON_GetObjectItem(arr_item,"snum"));
json_timestamp = cJSON_GetObjectItem( arr_item, "snum");
printf("snum:%s\r\n",json_timestamp->valuestring);
cJSON_Print(cJSON_GetObjectItem(arr_item,"filename"));
json_timestamp = cJSON_GetObjectItem(arr_item, "filename");
printf("filename:%s\r\n",json_timestamp->valuestring);
cJSON_Print(cJSON_GetObjectItem(arr_item,"pnum"));
json_timestamp = cJSON_GetObjectItem(arr_item,"pnum");
printf("punm:%d\r\n",json_timestamp->valueint);
cJSON_Print(cJSON_GetObjectItem(arr_item,"name"));
json_timestamp = cJSON_GetObjectItem(arr_item, "name");
printf("name:%s\r\n",json_timestamp->valuestring);
arr_item = arr_item->next;//下一个子对象
}
// 释放内存空间
cJSON_Delete(json);
cJSON_Delete(url);
cJSON_Delete(arr_item);
}
}
return 0;
}