0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

JSON格式以及cJSON的使用及注意事项

STM32单片机 来源:未知 作者:李倩 2018-10-16 08:57 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

前言

STM32 OTA例程中,设备端(STM32F769探索板)与云端交换数据使用的是JSON格式。在本篇文章中,将对JSON格式以及cJSON的使用及注意事项进行说明。

JSON格式

JSON(JavaScript Object Notation)是一个轻量级的数据交换格式。既便于开发者读写,也便于机器分析和构建。它独立于开发语言,是一种文本格式,很适用描述在各个系统间交换的数据。

JSON格式的数据看起来就像下面这个样子:

这个JSON数据描述的是Room1的LED灯状态以及温度值。它由一组“名称(key)”以及对应的“ 值(value)”组成。“名称”和“ 值”之间由“ :”分开。各组“名称:值”对之间由“,”符号进行分割。

cJSON的使用

针对不同的开发语言,网上有很多JSON的实现, demo里使用的是cJSON,版本1.6。它的源码可以在

https://github.com/DaveGamble/cJSON上下载。

01将cJSON添加到工程

cJSON只有一个C文件cJSON.c和一个头文件cJSON.h。所以只需要将这两个文件拷贝到工程文件夹中,并将cJSON.c添加到工程中就可以了。

02数据结构

cJSON中使用下面的数据结构来表示JSON数据

*next和*prev 指针可以用来遍历“矩阵”或者“对象”类型的JSON数据链表;这两种类型的JSON数据还会有一个子数据指针*child

type : 表示该JSON数据的类型,比如数字,字符串、矩阵、对象等

*valuestring, valueint, valuedouble和*string指针分别指向该JSON数据类型具体的值,视其类型而定。

03使用cJSON生成JSON数据

下面我们看看如何使用cJSON来生成下面的数据:

见下面的代码:

现在就已经在cJSON中,构件好了和前面的数据对应的数据结构。但现在这个数据结构还不能发送出去,需要调用cJSON_Print将其打印成串行的数据,存放在buffer中,以便后面进行发送。

cJSON_Print执行的时候会向系统申请一段内存来保存串行化了的数据,并返回其指针。这里一定要注意的是,cJSON_Print中申请的内存,一定要记得释放(cJSON的代码中不会自动去做释放动作),否则就会出现内存泄漏。

通过cJSON_CreateObject创建的对象,也需要调用cJSON_Delete来进行删除并释放占用的内存。否则也会出现内存泄漏。见下面的代码:

仔细的同学可能会发现为什么调用了两次cJSON_CreateObject,但只看到释放了其中的device_obj。这里也是需要注意的一个地方,从前面的代码中,我们可以看到,reported_obj最终是作为子对象添加到了device_obj中,所以在删除device_obj时,cJSON_Delete会自动删除device_obj中所有的子对像,故而不需要再调用cJSON_Delete对reported_obj进行删除。

04使用cJSON解析JSON数据

可以通过cJSON_Parse()函数来解析接收到的JSON数据,cJSON_Parse()函数会对数据进行解析,并申请一段内存保存解析后的cJSON的数据结构,并返回指针。

通过cJSON_GetObjectItem()函数可以获取解析后的cJSON数据结构中的第一级子对象。

使用cJSON_Parse()后,切记也一定要通过cJSON_Delete释放之前所申请的内存。

下面代码是对收到的JSON数据的解析过程。收到的数据内容为:

总结

cJSON代码量不大,用起来也方便。使用的时候一定要注意前面提到对使用完的内存空间进行释放。否则会造成内存泄漏。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • STM32
    +关注

    关注

    2313

    文章

    11195

    浏览量

    374650
  • JSON
    +关注

    关注

    0

    文章

    129

    浏览量

    7810

原文标题:STM32 FOTA例程之cJSON:就问你会不会使用!

文章出处:【微信号:STM32_STM8_MCU,微信公众号:STM32单片机】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    cJSON库是什么?

    的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。 这些特性使JSON成为理想的数据交换语言。 cJSON
    发表于 01-29 07:13

    请问CW32F030的硬件注意事项有哪些?

    CW32F030的硬件注意事项有哪些
    发表于 12-25 08:20

    请问IAP功能升级流程中有哪些注意事项

    IAP 功能升级流程中有哪些注意事项
    发表于 12-23 07:55

    BNC转接头接线注意事项

    本文从工程角度总结BNC转接头接线过程中的关键注意事项,涵盖阻抗匹配、接线规范、工艺选择及检测要点,帮助用户避免常见接线问题。
    的头像 发表于 12-19 14:04 624次阅读
    BNC转接头接线<b class='flag-5'>注意事项</b>

    迅为RK3588开发板Android系统烧写及注意事项

    迅为RK3588开发板Android系统烧写及注意事项
    的头像 发表于 12-03 15:17 7394次阅读
    迅为RK3588开发板Android系统烧写及<b class='flag-5'>注意事项</b>

    驱动板PCB布线的注意事项

    PCB Layout 注意事项 1)布局注意事项: ●● 整体布局遵循功率回路与小信号控制回路分开布局原则,功率部分和控制部分的 GND 分开回流到输入 GND。 ●● 芯片的放置方向优先考虑驱动
    发表于 12-02 07:40

    CW32F030在使用中的注意事项有哪些?

    CW32F030在使用中的注意事项有哪些?
    发表于 11-18 06:20

    RT1180 XMCD的特点和使用注意事项

    之前在 “XMCD – i.MX RT11xx系列简单易用的特定外设配置功能”的文章给大家介绍了XMCD功能的基础知识和用法,不过前面是以RT1170为例介绍的,本文将基于RT1180着重介绍XMCD的特点以及使用时的注意事项
    的头像 发表于 10-07 11:06 1572次阅读
    RT1180 XMCD的特点和使用<b class='flag-5'>注意事项</b>

    emWin AppWizard 开发注意事项有哪些?

    emWin AppWizard 开发注意事项
    发表于 09-04 06:18

    【NCS随笔】NCS使用CJSON

    【NCS随笔】NCS使用CJSON库 这个文章讲一下在NCS上面如何使用JSON库,我使用Hello_world例程添加库 宏的配置 CONFIG_LOG =y
    的头像 发表于 08-13 15:12 750次阅读
    【NCS随笔】NCS使用<b class='flag-5'>CJSON</b>库

    别让这些细节毁了PCBA!焊接注意事项清单

    一站式PCBA加工厂家今天为大家讲讲PCBA加工中电子元器件焊接注意事项有哪些?PCBA加工中电子元器件焊接注意事项。 电子元器件焊接关键注意事项 在PCBA加工中,焊接工艺直接影响电路板的可靠性
    的头像 发表于 07-23 09:26 1499次阅读

    美国Odyssey奥德赛电池充电注意事项全解析

    Odyssey奥德赛电池充电注意事项全解析 奥德赛电池作为高性能的深循环铅酸电池,广泛应用于汽车启动、摩托车、船舶以及备用电源系统中。正确的充电方法不仅能够延长电池寿命,还能保障其性能稳定发挥
    的头像 发表于 05-19 16:31 1285次阅读
    美国Odyssey奥德赛电池充电<b class='flag-5'>注意事项</b>全解析

    IGBT器件的防静电注意事项

    IGBT作为功率半导体器件,对静电极为敏感。我将从其静电敏感性原理入手,详细阐述使用过程中防静电的具体注意事项与防护措施,确保其安全稳定运行。
    的头像 发表于 05-15 14:55 2166次阅读

    手机喇叭气密性检测仪的注意事项

    使用手机喇叭气密性检测仪的注意事项包括以下几点:一、使用前注意事项仔细阅读手机喇叭气密性检测仪的使用说明书,了解设备的操作方法和注意事项。检查气密性检测仪的各部件是否完好,包括压力表、传感器、连接
    的头像 发表于 05-15 13:38 892次阅读
    手机喇叭气密性检测仪的<b class='flag-5'>注意事项</b>

    设置射频网络分析仪的测试条件有哪些注意事项

    射频网络分析仪(VNA)的测试条件设置直接影响测量结果的准确性和可靠性。以下从仪器配置、被测器件(DUT)特性、环境干扰、校准与验证四个维度,系统梳理关键注意事项及解决方案。一、仪器配置与参数设置
    发表于 05-06 16:02