建议使用以下浏览器,以获得最佳体验。 IE 9.0+以上版本 Chrome 31+ 谷歌浏览器 Firefox 30+ 火狐浏览器
请选择 进入手机版 | 继续访问电脑版
设置昵称

在此一键设置昵称,即可参与社区互动!

确定
我再想想
选择版块
直达楼层
标签
您还可以添加5个标签
  • 没有搜索到和“关键字”相关的标签
  • 云产品
  • 解决方案
  • 技术领域
  • 通用技术
  • 平台功能
取消

采纳成功

您已采纳当前回复为最佳回复

樊心昊

发帖: 172粉丝: 139

发消息 + 关注

发表于2020年06月19日 19:46:17 661 2
直达本楼层的链接
楼主
显示全部楼层
[技术干货] 0x08 LiteOS_Lab仓库组件详解 cJSON(下)

三、cJson库中封装相关函数详解

假设我们收到了一帧JSON格式来自服务器的数据,如下图:

    image.png       

从JSON的字面意思可以理解:该数据是一个命令,命令的键为“Light”,值为“ON”,命令单片机将板载LED灯打开。

我们可以这样理解这个数据,”paras”、”service_id”和”command_name”都术语同一个object中的item,我们暂时可以忽略”paras”和”service_id”参数,先提取paras这个object类型的item,然后读取”paras”中的item的键是否包含”Light”,如果包含再读取”Light”键对应的值为ON还是OFF。

       具体步骤可以分为:

    将MQTT接收任务中收到的“string“类型的数据转换为JSON格式

    读取object中的paras项目,并查询其中是否有特定名称的键(Light)

    提取特定名称键的值

    根据②、③步骤中获取的键、值来执行相应操作

    上报处理结果

将MQTT接收任务中收到的数据解析为JSON格式

首先创建一个cJSON类型的结构体指针,用于保存将MQTT接收任务中收到的“string“类型的数据转换为JSON格式的数据

调用CJSON_PUBLIC(cJSON *) cJSON_Parse(const char *value);函数,传入MQTT接收任务中收到的“string“类型的数据指针,解析完成之后可以收到一个cJSON类型的结构体指针,使用完之后记得释放,否则会造成内存泄漏。

从object中读取item

       将解析出来的JSON结构体指针传入作为第一个参数,”paras”作为第二个参数传入CJSON_PUBLIC(cJSON *) cJSON_GetObjectItem(const cJSON * const object, const char * const string);函数,将得到一个cJSON类型的结构体指针,该指针的内容就是名为”paras”的item。

       将名为”paras”的item cJSON结构体指针作为第一个参数,“Light”作为第二个参数传入CJSON_PUBLIC(cJSON_bool) cJSON_HasObjectItem(const cJSON *object, const char *string);函数,如果paras中包含名为”Light”的item,则会放回true,这是我们可以通过if语句进行判断,如果存在,则进行读取名为”Light”的键对应的值。

从object中读取值

       将指向名为”Light”的item的cJSON函数指针传入CJSON_PUBLIC(char *) cJSON_GetStringValue(cJSON *item);即可在函数返回值得到一个字符串指针,我们可以通过strstr等等之类的字符串比较函数判断该返回值是否为”ON”或者”OFF”,并指示单片机完成相应操作即可。

 

总结以及注意事项:cJSON库的操作到这里就大概说完了,大家还可以自行查阅cJSON.h文件,里面定义了很多函数和结构体,可以根据自己需要进行的操作调用相应的函数来处理,唯一需要注意的是无论是创建Object还是解析string,用完之后一定要记得释放内存,如果使用了例如将JSON格式的数据生成为非格式化字符串的函数一定要记得释放这个string字符串指针对的的内存,否则最终会造成内存泄露,导致程序出错。


举报
分享

分享文章到朋友圈

分享文章到微博

采纳成功

您已采纳当前回复为最佳回复

ttking

发帖: 380粉丝: 22

发消息 + 关注

发表于2020年06月20日 08:48:14
直达本楼层的链接
沙发
显示全部楼层

感谢分享!

点赞 评论 引用 举报

采纳成功

您已采纳当前回复为最佳回复

我是卤蛋

发帖: 121粉丝: 292

级别 : 版主,版块专家

发消息 + 关注

发表于2020年06月26日 11:03:18
直达本楼层的链接
板凳
显示全部楼层

实用分享,持续学习~

点赞 评论 引用 举报

游客

富文本
Markdown
您需要登录后才可以回帖 登录 | 立即注册

结贴

您对问题的回复是否满意?
满意度
非常满意 满意 一般 不满意
我要反馈
0/200