在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
JSON语法说明 先来看一个简单的JSON 1 { 2 "stars": [ 3 { 4 "name": "Faye", 5 "address": "北京" 6 }, 7 { 8 "name": "andy", 9 "address": "香港" 10 }, 11 { 12 "name": "eddie", 13 "address": " 台@@湾 " 14 }, 15 16 ] 17 } JSON 语法是 JavaScript 对象表示法语法的子集。数据在键/值对中;数据由逗号分隔;花括号保存对象, 也称一个文档对象;方括号保存数组, 每个数组成员用逗号隔开, 并且每个数组成员可以是文档对象或者数组或者键值对 。 JSON基于两种结构: JSON的三种语法: 键/值对 key:value,用半角冒号分割。 比如 "name":"Faye" 附cJSON库下载地址 https://github.com/DaveGamble/cJSON cJSON库在使用的时候只需要如下两步:将cJSON.c(或者库文件) 和 cJSON.h添加到项目中即可;如果在命令行中进行链接 还需要加上-lm 表示链接math库 . C语言函数库写JSON文件 : 从缓冲区中解析出JSON结构:extern cJSON *cJSON_Parse(const char *value); 将传入的JSON结构转化为字符串 :extern char *cJSON_Print(cJSON *item); 将JSON结构所占用的数据空间释放 :void cJSON_Delete(cJSON *c) 创建一个值类型的数据 :extern cJSON *cJSON_CreateNumber(double num); 创建一个对象(文档) :extern cJSON *cJSON_CreateObject(void); 数组创建以及添加 :cJSON *cJSON_CreateIntArray(const int *numbers,int count); JSON嵌套 : 【 向对象中增加键值对】 cJSON_AddItemToObject(root, "rows", 值类型数据相关函数()); 几个能提高操作效率的宏函数 :#define cJSON_AddNumberToObject(object,name,n) \ C语言库函数解析JSON文件 : 根据键找json结点 :extern cJSON *cJSON_GetObjectItem(cJSON *object,const char *string) 判断是否有key是string的项 如果有返回1 否则返回0 :extern int cJSON_HasObjectItem(cJSON *object,const char *string) 返回数组结点array中成员的个数 :extern int cJSON_GetArraySize(cJSON *array); 根据数组下标index取array数组结点的第index个成员 返回该成员节点 :extern cJSON *cJSON_GetArrayItem(cJSON *array,int index); 遍历数组 :#define cJSON_ArrayForEach(pos, head) for(pos = (head)->child; pos != NULL; pos = pos->next) 我们先来小试牛刀,编写一个输出到屏幕的简单json结构,代码1如下: 1 #include<stdio.h> 2 #include<stdlib.h> 3 #include"cJSON.h" 4 5 int main(void) 6 { 7 char *data = "{\"love\":[\"LOL\",\"Go shopping\"]}"; 8 //从缓冲区中解析出JSON结构 9 cJSON * json= cJSON_Parse(data); 10 11 //将传入的JSON结构转化为字符串 并打印 12 char *json_data = NULL; 13 printf("data:%s\n",json_data = cJSON_Print(json)); 14 15 free(json_data); 16 //将JSON结构所占用的数据空间释放 17 cJSON_Delete(json); 18 return 0; 19 } 如下所示编译程序,执行程序,可以看到屏幕输出一个简单的json结构 下面我们在改进一下程序,输出到屏幕的同时,生成对应的json文件,代码2如下: 1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<string.h> 4 #include"cJSON.h" 5 6 int main(void) 7 { 8 char *char_json = "{\"habit\":\"lol\"}"; 9 //从缓冲区中解析出JSON结构 10 cJSON *json = cJSON_Parse(char_json); 11 //将传入的JSON结构转化为字符串 并打印 12 char *buf = NULL; 13 printf("data:%s\n",buf = cJSON_Print(json)); 14 //打开一个exec.json文件,并写入json内容 15 FILE *fp = fopen("exec.json","w"); 16 fwrite(buf,strlen(buf),1,fp); 17 18 fclose(fp); 19 free(buf); 20 cJSON_Delete(json); 21 return 0; 22 } 如下图所示进行编译,执行程序,查看生成的对应的json文件 下面我们生成一个生成一个json结构稍微复杂一点的json文件,代码3如下: 1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<string.h> 4 #include"cJSON.h" 5 6 int main(void) 7 { 8 //创建一个空的文档(对象) 9 cJSON *json = cJSON_CreateObject(); 10 11 //向文档中增加一个键值对{"name":"王大锤"} 12 cJSON_AddItemToObject(json,"name",cJSON_CreateString("王大锤")); 13 //向文档中添加一个键值对 14 //cJSON_AddItemToObject(json,"age",cJSON_CreateNumber(29)); 15 cJSON_AddNumberToObject(json,"age",29); 16 17 cJSON *array = NULL; 18 cJSON_AddItemToObject(json,"love",array=cJSON_CreateArray()); 19 cJSON_AddItemToArray(array,cJSON_CreateString("LOL")); 20 cJSON_AddItemToArray(array,cJSON_CreateString("NBA")); 21 cJSON_AddItemToArray(array,cJSON_CreateString("Go shopping")); 22 23 cJSON_AddNumberToObject(json,"score",59); 24 cJSON_AddStringToObject(json,"address","beijing"); 25 26 //将json结构格式化到缓冲区 27 char *buf = cJSON_Print(json); 28 //打开文件写入json内容 29 FILE *fp = fopen("create.json","w"); 30 fwrite(buf,strlen(buf),1,fp); 31 free(buf); 32 fclose(fp); 33 //释放json结构所占用的内存 34 cJSON_Delete(json); 35 return 0; 36 } 编译程序,执行程序,查看生成的json文件 下面再来编写一个,代码4如下: 1 #include<stdio.h> 2 #include<string.h> 3 #include<stdlib.h> 4 #include"cJSON.h" 5 6 int main(void) 7 { 8 //先创建空对象 9 cJSON *json = cJSON_CreateObject(); 10 //在对象上添加键值对 11 cJSON_AddStringToObject(json,"country","china"); 12 //添加数组 13 cJSON *array = NULL; 14 cJSON_AddItemToObject(json,"stars",array=cJSON_CreateArray()); 15 //在数组上添加对象 16 cJSON *obj = NULL; 17 cJSON_AddItemToArray(array,obj=cJSON_CreateObject()); 18 cJSON_AddItemToObject(obj,"name",cJSON_CreateString("Faye")); 19 cJSON_AddStringToObject(obj,"address","beijing"); 20 //在对象上添加键值对 21 cJSON_AddItemToArray(array,obj=cJSON_CreateObject()); 22 cJSON_AddItemToObject(obj,"name",cJSON_CreateString("andy")); 23 cJSON_AddItemToObject(obj,"address",cJSON_CreateString("HK")); 24 25 cJSON_AddItemToArray(array,obj=cJSON_CreateObject()); 26 cJSON_AddStringToObject(obj,"name","eddie"); 27 cJSON_AddStringToObject(obj,"address","TaiWan"); 28 29 //清理工作 30 FILE *fp = fopen("create.json","w"); 31 char *buf = cJSON_Print(json); 32 fwrite(buf,strlen(buf),1,fp); 33 fclose(fp); 34 cJSON_Delete(json); 35 return 0; 36 } 编译执行程序,效果如下图所示: 写了这么多生成xml的例子,下面我们来一个解析的例子,代码5如下: 按 Ctrl+C 复制代码
按 Ctrl+C 复制代码
编译程序,执行程序,解析出json信息如下图所示,
关于更多的json学习,可以自己根据提供的cJSON.h cJSON.c进行深入的学习,学无止境,我这里就介绍到这里了。 |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论