1.重要函数说明
    【1】两个创建
【创建JSON对象】cJSON *cJSON_CreateObject(void);
【创建JSON数组】cJSON *cJSON_CreateArray(void);
    【2】两种添加
【向对象中添加】voidcJSON_AddItemToObject(cJSON *object,const char *string,cJSON *item);
【向数组中添加】void cJSON_AddItemToArray(cJSON *array, cJSON *item);
    【3】常用几招
【向对象中增加数字】cJSON_AddItemToObject(root, "value", cJSON_CreateNumber(value));
【向对象中增加文件】cJSON_AddItemToObject(root, "string", cJSON_CreateString(string));
    【4】JSON嵌套
【向对象中增加数组】cJSON_AddItemToObject(root, "rows", rows = cJSON_CreateArray());
【向数组中增加对象】cJSON_AddItemToArray(rows, row = cJSON_CreateObject());
2.创建各种各样的JSON数据包
在这里通过代码举几个例子,更多的内容请查看代码仓库中的相关文件。
    【1】JSON数字
[cpp] view plaincopy
  1. void create_single_number(void) {
  2. cJSON *root;
  3. char *out;
  4. int value = 24;
  5. root = cJSON_CreateObject(); // 创建根
  6. cJSON_AddItemToObject(root, "value", cJSON_CreateNumber(value));
  7. // 打印并释放
  8. out = cJSON_Print(root); cJSON_Delete(root); printf("%s\n",out); free(out);
  9. // 控制台输出
  10. #if 0
  11. {
  12. "value": 24
  13. }
  14. #endif
  15. }
    【简单说明】
【1】cJSON_AddItemToObject(root, "value", cJSON_CreateNumber(value)); 
【2】cJSON_AddNumberToObject(root, "value", value); 
【1】和【2】效果完全相同。
    【2】JSON字符串
[cpp] view plaincopy
  1. void create_single_string(void) {
  2. cJSON *root;
  3. char *out;
  4. char *name = "xukai871105";
  5. root = cJSON_CreateObject(); // 创建根
  6. // 方法 使用cJSON_AddItemToObject,推荐使用
  7. cJSON_AddItemToObject(root, "name", cJSON_CreateString(name));
  8. // 打印并释放
  9. out = cJSON_Print(root); cJSON_Delete(root); printf("%s\n",out); free(out);
  10. // 控制台输出
  11. #if 0
  12. {
  13. "name": "xukai871105"
  14. }
  15. #endif
  16. }
    【简单说明】
【1】 cJSON_AddItemToObject(root, "name", cJSON_CreateString(name));
【2】 cJSON_AddStringToObject(root, "name",name);
【1】和【2】效果完全相同。
    【3】JSON布尔类型
[cpp] view plaincopy
  1. void create_bool(void) {
  2. cJSON *root;
  3. char *out;
  4. root = cJSON_CreateObject(); // 创建根
  5. cJSON_AddItemToObject(root, "success", cJSON_CreateFalse());
  6. // 打印并释放
  7. out = cJSON_Print(root); cJSON_Delete(root); printf("%s\n",out); free(out);
  8. // 控制台输出
  9. #if 0
  10. {
  11. "success": false
  12. }
  13. #endif
  14. }
    【简单说明】
【1】布尔类型不需要加引号。
3.JSON格式嵌套
JSON格式在使用时往往存在嵌套,例如JSON对象中嵌套JSON数组而JSON数组中嵌套JSON对象,下面就通过几个简单的例子说明问题。
    【1】JSON简单嵌套
[cpp] view plaincopy
  1. void create_simple(void) {
  2. cJSON *root;
  3. char *out;
  4. int list[4] = {5,6,7,8};
  5. root = cJSON_CreateObject(); // 创建根
  6. cJSON_AddItemToObject(root, "lists", cJSON_CreateIntArray(list, 4));
  7. // 打印并释放
  8. out = cJSON_Print(root); cJSON_Delete(root); printf("%s\n",out); free(out);
  9. // 控制台输出
  10. #if 0
  11. {
  12. "lists": [5, 6, 7, 8]
  13. }
  14. #endif
  15. }
    【2】JSON复杂嵌套
[cpp] view plaincopy
  1. void create_complex(void) {
  2. cJSON *root, *rows, *row;
  3. char *out;
  4. int i = 0;
  5. char *title[3] = { "树莓派学习笔记——索引博文",
  6. "树莓派学习笔记——GPIO功能学习",
  7. "物联网学习笔记——索引博文"};
  8. char *url[3] = { "http://blog.csdn.net/xukai871105/article/details/23115627",
  9. "http://blog.csdn.net/xukai871105/article/details/12684617",
  10. "http://blog.csdn.net/xukai871105/article/details/23366187"};
  11. root = cJSON_CreateObject(); // 创建根
  12. cJSON_AddNumberToObject(root, "total", 3);
  13. // 在object中加入array
  14. cJSON_AddItemToObject(root, "rows", rows = cJSON_CreateArray());
  15. for(i = 0; i < 3; i++) {
  16. // 在array中加入object
  17. cJSON_AddItemToArray(rows, row = cJSON_CreateObject());
  18. cJSON_AddItemToObject(row, "title", cJSON_CreateString(title[i]));
  19. cJSON_AddItemToObject(row, "url", cJSON_CreateString(url[i]));
  20. }
  21. // 打印并释放
  22. out = cJSON_Print(root); cJSON_Delete(root); printf("%s\n",out); free(out);
  23. // 控制台输出
  24. #if 0
  25. {
  26. "total": 3,
  27. "rows": [{
  28. "title": "树莓派学习笔记——索引博文",
  29. "url": "http://blog.csdn.net/xukai871105/article/details/23115627"
  30. }, {
  31. "title": "树莓派学习笔记——GPIO功能学习",
  32. "url": "http://blog.csdn.net/xukai871105/article/details/12684617"
  33. }, {
  34. "title": "物联网学习笔记——索引博文",
  35. "url": "http://blog.csdn.net/xukai871105/article/details/23366187"
  36. }]
  37. }
  38. #endif
  39. }
    【简单说明】
rows为JSON对象,rows对象中嵌套JSON数组,每一个JSON数组的元素又是一个JSON对象,该该对象名为row,row对象中具有两个键值对,分别是titile和url。
2015/08/19 17:50
【其他参考示例】
1. 函数的使用
宏的定义原型:
/* Macros for creating things quickly. */
#define cJSON_AddNullToObject(object,name)      cJSON_AddItemToObject(object, name, cJSON_CreateNull())
#define cJSON_AddTrueToObject(object,name)      cJSON_AddItemToObject(object, name, cJSON_CreateTrue())
#define cJSON_AddFalseToObject(object,name)     cJSON_AddItemToObject(object, name, cJSON_CreateFalse())
#define cJSON_AddBoolToObject(object,name,b)    cJSON_AddItemToObject(object, name, cJSON_CreateBool(b))
#define cJSON_AddNumberToObject(object,name,n)  cJSON_AddItemToObject(object, name, cJSON_CreateNumber(n))
#define cJSON_AddStringToObject(object,name,s)  cJSON_AddItemToObject(object, name, cJSON_CreateString(s))
示例:
cJSON *root = cJSON_CreateObject();  //先创建一个对象
cJSON_AddNumberToObject(root, "value", 123.4);
cJSON_AddStringToObject(root, "year", "2015");
cJSON_AddNullToObject(root, "secret");
cJSON_AddTrueToObject(root, "Bool");
cJSON_AddFalseToObject(root, "false");
cJSON_AddBoolToObject(root, "Yes", 3);
cJSON_AddBoolToObject(root, "Yes", 0);
out = cJSON_Print(root);    //打印对象
//out = cJSON_PrintUnformatted(root);  //非格式化的打印
//printf("===> 2: %s\n", out);
printf("%s\n", out);
cJSON_Delete(root);  //释放对象所占的内存
free(out);
函数的原型:
/* These calls create a cJSON item of the appropriate type. */
extern cJSON *cJSON_CreateNull(void);
extern cJSON *cJSON_CreateTrue(void);
extern cJSON *cJSON_CreateFalse(void);
extern cJSON *cJSON_CreateBool(int b);
extern cJSON *cJSON_CreateNumber(double num);
extern cJSON *cJSON_CreateString(const char *string);
extern cJSON *cJSON_CreateArray(void);
extern cJSON *cJSON_CreateObject(void);
示例:参考上面博客的代码
函数原型:
/* These utilities create an Array of count items. */
extern cJSON *cJSON_CreateIntArray(const int *numbers,int count);
extern cJSON *cJSON_CreateFloatArray(const float *numbers,int count);
extern cJSON *cJSON_CreateDoubleArray(const double *numbers,int count);
extern cJSON *cJSON_CreateStringArray(const char **strings,int count);
/* Append item to the specified array/object. */
extern void cJSON_AddItemToArray(cJSON *array, cJSON *item);
extern void cJSON_AddItemToObject(cJSON *object,const char *string,cJSON *item);
extern void cJSON_AddItemToObjectCS(cJSON *object,const char *string,cJSON *item); 
示例:
char *out = NULL;  
int array[] = {1, 2, 3, 4};
int array1[] = {1, 2, 3, 4, 5, 6};
cJSON *json = NULL;
cJSON *item = NULL;
cJSON *tmp = NULL;
json  = cJSON_CreateObject();
//cJSON_AddItemToObject(json,"array",  cJSON_CreateIntArray(array, 4));  //与下面两行等价
item = cJSON_CreateIntArray(array, 4);
cJSON_AddItemToObject(json, "array", item);
out = cJSON_Print(json);
printf("%s\n", out);
printf("=========================\n");
printf("size: %d\n", cJSON_GetArraySize(item));  //输出为4  4个元素
tmp = cJSON_GetArrayItem(json, 0);  //获取json中的第一个节点
if (NULL != tmp)
{  
printf("ok..\n");  
printf("size: %d\n", cJSON_GetArraySize(tmp));
}  
else
printf("error...\n");
    //此时item数组中的元素有  1 2 3 4 5 6 7 
printf("=========================\n");
cJSON_AddItemToArray(item, cJSON_CreateNumber(5));
cJSON_AddItemToArray(item, cJSON_CreateNumber(6));
cJSON_AddItemToArray(item, cJSON_CreateNumber(7));
printf("size: %d\n", cJSON_GetArraySize(item));
out = cJSON_Print(json);
printf("%s\n", out);
tmp = cJSON_CreateIntArray(array1, 6);
    //cJSON_AddItemToObject(json, "array1", tmp);   //好像与下面一句话等价呢
cJSON_AddItemReferenceToObject(json, "array1", tmp);
out = cJSON_Print(json);
printf("%s\n", out);
    //整形数组的参考示例
int array3[] = {1, 3, 5, 7, 9};
json = cJSON_CreateIntArray(array3, 5);
out = cJSON_Print(json);   cJSON_Delete(json);    printf("%s\n", out);   free(out); 
    //字符指针数组
const char *strings[7]={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};
json = cJSON_CreateStringArray(strings, 7);  
    out = cJSON_Print(json);    cJSON_Delete(json);   printf("%s\n", out);   free(out); 
参考博客:http://blog.csdn.net/xukai871105/article/details/33013455

【cJSON】CJSON学习笔记(二)相关推荐

  1. qml学习笔记(二):可视化元素基类Item详解(上半场anchors等等)

    原博主博客地址:http://blog.csdn.net/qq21497936 本文章博客地址:http://blog.csdn.net/qq21497936/article/details/7851 ...

  2. [转载]dorado学习笔记(二)

    原文地址:dorado学习笔记(二)作者:傻掛 ·isFirst, isLast在什么情况下使用?在遍历dataset的时候会用到 ·dorado执行的顺序,首先由jsp发送请求,调用相关的ViewM ...

  3. PyTorch学习笔记(二)——回归

    PyTorch学习笔记(二)--回归 本文主要是用PyTorch来实现一个简单的回归任务. 编辑器:spyder 1.引入相应的包及生成伪数据 import torch import torch.nn ...

  4. tensorflow学习笔记二——建立一个简单的神经网络拟合二次函数

    tensorflow学习笔记二--建立一个简单的神经网络 2016-09-23 16:04 2973人阅读 评论(2) 收藏 举报  分类: tensorflow(4)  目录(?)[+] 本笔记目的 ...

  5. Scapy学习笔记二

    Scapy学习笔记二 Scapy Sniffer的用法: http://blog.csdn.net/qwertyupoiuytr/article/details/54670489 Scapy Snif ...

  6. Ethernet/IP 学习笔记二

    Ethernet/IP 学习笔记二 原文链接:http://wiki.mbalib.com/wiki/Ethernet/IP 1.通信模式 不同于源/目的通信模式,EtherNet/IP 采用生产/消 ...

  7. Java学习笔记二:数据类型

    Java学习笔记二:数据类型 1. 整型:没有小数部分,允许为负数,Java整型分4种:int short long byte 1.1 Int最为常用,一个Int类型变量在内存中占用4个字节,取值范围 ...

  8. 吴恩达《机器学习》学习笔记二——单变量线性回归

    吴恩达<机器学习>学习笔记二--单变量线性回归 一. 模型描述 二. 代价函数 1.代价函数和目标函数的引出 2.代价函数的理解(单变量) 3.代价函数的理解(两个参数) 三. 梯度下降- ...

  9. ASP.NET MVC 2 学习笔记二: 表单的灵活提交

    ASP.NET MVC 2 学习笔记二:  表单的灵活提交 前面说到有做到公司内部的一个请假系统,用的是ASP.NET MVC 2+Entity Framework.虽然EF(Entity Frame ...

  10. amazeui学习笔记二(进阶开发4)--JavaScript规范Rules

    amazeui学习笔记二(进阶开发4)--JavaScript规范Rules 一.总结 1.注释规范总原则: As short as possible(如无必要,勿增注释):尽量提高代码本身的清晰性. ...

最新文章

  1. 扒一扒.net、.net framework、mono和Unity
  2. 阿里AI大牛聂再清重返清华,加入张亚勤AIR战队
  3. PyTorch ResNet 测试
  4. “Hello,Jetpack”:构建您的第一个Jetpack应用程序
  5. mysql select 1
  6. 【PAT乙级】1051 复数乘法 (15 分)
  7. DataArtisans战略联手阿里云 Apache Flink服务能力云化
  8. Java基础中按值传递和引用传递详解
  9. 当自己颓废的时候怎么激励自己?
  10. Atitit nosql的艺术 attilax著作 目录 1. 1.5NoSQL数据库的类型 1 1.1. 1.5.1键值(Key/Value)存储 1 1.2. 1.5.2面向文档的数据库 1 1
  11. php js 批量打开页面
  12. SonarLint 默认扫描规则
  13. 经验模态分解(Empirical Mode Decomposition ,EMD)特征提取及其原理
  14. 全球及中国EOG放大器行业运营前景与发展动态研究报告2022版
  15. 【安全】Web指纹识别
  16. 常见的配置中心:Apollo(二)-接入Apollo
  17. 远程调试工具之weinre
  18. Zetore Jasminum插件 报错:文件名识别出错,请检查文件名识别模板与实际抓取文件名
  19. vue3+ts中使用腾讯地图
  20. 东野圭吾《梦幻花》读后感

热门文章

  1. guid主分区表损坏怎么办_轻钢龙骨隔墙怎么办?轻钢龙骨隔墙的做法
  2. 第10章 例题 7-4 汉诺(Hanoi)塔问题
  3. 如何把linux电脑当做数据库,在linux下如何进行mysql命令行 创建数据库linux操作系统 -电脑资料...
  4. linux fastQC 操作命令,[Bio-Info]fq文件解析统计工具:FastQC在linux下初应用
  5. Windows Azure Storage (10) Windows Azure 上的托管服务CDN (下) Hosted Service
  6. mybatis整合数据权限
  7. 【easy】206. Reverse Linked List 链表反转
  8. 装饰器前奏2(2017年8月23日 11:50:39)(2017年8月29日 16:07:32)
  9. MVC4将Controller与views分开
  10. 祝贺自己操作系统JAVA项目有进展!!