cJSON 终极攻略

cJSON 的  应用 攻略。 (这不是一篇 小白教程 而是一篇 对 cJSON 应用 有点东西 的思考成果)

目前技术经理 提供成长学习星球 加V 13106543984 (299 48小时内可退)
提供程序员成长学习地图 提供成长学习通道 减少自我摸索的过程 
专职提供服务 
Linux C C++ 初级程序员入行
Linux C C++ 中级程序员进阶
Linux C C++ 高级程序员成型
技术转管理进阶 带团队解决问题
简历打造  跳槽时机 工作指导 职场发展 解惑答疑等
对于刚要入行 初级程序升中级 有极大收益 
中级升高级 高级升管理 有较大收益

1. cJSON  名字

JSON:JavaScript Object Notation。 (JavaScript对象表示法)

是一种轻量级的数据交换格式

2.cJSON 样貌

JSON 里面就包含 两种 结构

对象 :{key:vlaue}

数组 :  [key:value]

终极关键内涵:vlaue 可以是 数字(整数或浮点数)、字符串(在双引号中)、逻辑值(true或false)、数组(在方括号中)、对象(在花括号中)、null

终极关键内涵:vlaue 可以是 数字(整数或浮点数)、字符串(在双引号中)、逻辑值(true或false)、数组(在方括号中)、对象(在花括号中)、null

终极关键内涵:vlaue 可以是 数字(整数或浮点数)、字符串(在双引号中)、逻辑值(true或false)、数组(在方括号中)、对象(在花括号中)、null

重要的事情说 3 遍, 对cJson 文件格式的 理解 就都在 上面这句里面了哦。在运用过程中 请自行 YY。讲的太透就没啥意思了。

3.cJSON 核心

关键结构体

typedef struct cJSON {
  struct cJSON *next,*prev;      /* 遍历数组或对象链的前向或后向链表指针*/
  struct cJSON *child;           /*数组或对象的孩子节点*/
  int type;                      /* vlue的类型*/
  char *valuestring;               /*字符串值*/
  int valueint;                    /* 整数值*/
  double valuedouble;              /* 浮点数值*/
  char *string;                 /* key的名字*/
} cJSON;

cJSON api 中有 很多 这样的 cJSON 结构体指针。(api  指针 都不知道啥 意思, 感觉躲在厕所反思一波 ,为啥不知道- -,然后自行百度! )

对这个结构体的理解 直接 决定了 是否能 精准有效的 调用 cJSON 的 相关api。

终极关键结构体理解: 

struct cJSON *next,*prev;  链表   链表结构  

struct cJSON *child  子节点 树型结构  

这2个东西 是 结构体 精髓  对应着 上面的  对象 和  数组哦。 如有兴趣 可以深挖,会有惊喜  它对我们调用api 来说 是透明这里就不展开(透明请自行百度).

4.cJSON  召唤 

git clone https://github.com/DaveGamble/cJSON
cd cJSON
mkdir build
cd build
cmake ..
make
sudo make install

生成 so库后,编译时包含库路劲, 包含 .h 头文件 便可以调用api 了。

上述命令不懂的 自行做功课哦(少开一局农药,都会学到很多命令哦)。

5.cJSON 技能

它的技能: 增  删  读  写  变  转   (临兵斗者。。。 它的技能就是这个华丽) 

数组 : cJSON *json_array = cJSON_CreateArray();

添加 数组 或 对象 value 接口 :cJSON_AddItemToArray(json_array, json_obj)

添加 普通value cJSON_AddItemToArray(cjson_skill, cJSON_CreateString( "C" ));

对象:cJSON *json_obj = cJSON_CreateObject();

 添加 普通value cJSON_AddNumberToObject(json_obj, "repeat", appointment.repeat);

 添加 数组 或 对象 value 接口  cJSON_AddItemToObject(json_array, "repeat", json_obj);

备注 这里Object  api Add包含 item 增加的, 都是加的 json指针结构,如果 Add 后面 数据类型 加的 普通jesn 类型结构

数组:cJSON_DeleteItemFromObject(cj_obj , key);  /* key 为 string 看不懂 看 左键点接口 看 api 原型*/

对象:cJSON_DeleteItemFromArray(cj_array , index); /*index 为数组元素下表 从0开始 ( 别问问什么,问了就暴露水平)*/

数组 :cJSON *array_node = cJSON_GetObjectItem(cj_obj, key) 。

对象 :cJSON *obj_node = cJSON_GetObjectItem(cj_obj, key) /* 通过 obj_node 指针 读取里里面的元素  num  string  */ (不懂可以自行理解 可以get 不少东西哦)。

备注:如果 obj_node  array_node 不是最终节点(孩子尾节点)是可以嵌套持续调的哦 。

为啥这里  同一个api 要写两边嘛  不管 时 结构体 还是 数组 他们都是有 cJSON*  指针类型的哦。

数组: cJSON_ReplaceItemInArray(cj_array, index, json_obj);

对象:cJSON_ReplaceItemInObject(cj_object, "voice_volume", cJSON_CreateNumber(static_cast<int>(volume));

备注:这里的写 都是 通过 替换完成的 。 不能直接赋值哦 

将 cJSON* 结构 转成  const char* 类型的 字符串 

cJSON_Print(cj_root_) 自行考虑 delete 和 free (不想做 内存泄露 )

可以把 字符串 写到 .json 里面保存哦。

将 const char* 字符串 转成 cJSON*结构类型 

cJSON_Pare(const char* file_contents) ;

5. cJSON 项目实例

请加微信:13106543984  私信交流。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梦幽风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值