发新帖本帖赏金 30.00元(功能说明)我要提问
返回列表
打印
[C语言]

快速了解JSON语法与使用cJSON

[复制链接]
212|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
forgot|  楼主 | 2023-2-21 14:11 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 forgot 于 2023-2-21 14:19 编辑

  JSON 是存储和交换文本信息的一种语法因为其轻量化、易读、易扩展的特点,越来越被广泛采用,有点类似于XML,都是使用结构化方法来标记数据。

1、JSON的数据是采用键值对来表示:key:value,多个键值对使用逗号“,”分开。
2、JSON只有两种表示结构:对象和数组
对象,对象以大括号{}表示,1个对象中可以包含多个键值对。

数组,数组以中括号[]表示;1个数组中可以包含多个对象。

对象结构举列:
{
    key1:value1,
    key2:value2,
    ...
}

数组结构举例:
[
    {
        key1:value1,
        key2:value2
    },
    {
         key3:value3,
         key4:value4   
    }


  结构清楚了,再回来说一下键值对,键为字符串,代表的是这个数据的名字(name),而值可以有多种属性,可以是对象、数组、数字、字符串或者三个字面值(falsenulltrue)。由于值可以是对象,这就决定了键/值对是可以嵌套的。

  实际在嵌入式单片机开发的时候,可以通过调用cJSON.ccJSON.h来快速实现JSON语**能。
  首先在cJSON.h可以看到cJSON结构体,该结构体是一个双向列表,并可通过*next,*prev遍历链表,通过*child指针访问下一层,其中type变量表达的是数据的类型,*valuestringvalueintvaluedouble代表的就是具体的数据,*string代表的就是这个数据的名称字符串。

  在cJSON.h已经有了所有需要用到的功能函数,并且在cJSON.c中可以看到其实现方式,但是对于快速使用,我们开始可以先了解常用的一些函数,如:
项目的创建:
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);

项目的添加:
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);

项目的解析:
extern cJSON *cJSON_Parse(const char *value);
extern char  *cJSON_Print(cJSON *item);
extern char  *cJSON_PrintUnformatted(cJSON *item);
extern char *cJSON_PrintBuffered(cJSON *item,int prebuffer,int fmt);

项目的删除:
extern void   cJSON_Delete(cJSON *c);


  熟悉了以上这些函数之后,就可以将cJSON.hcJSON.c添加到自己的单片机开发工程当中来通过相关函数解析收到的JSON数据包以及将自己的数据包封装成JSON发送给对方,使用的时候一定要注意,在使用中需要学会将不用的JSON进行删除,也就是cJSON_Delete(cJSON *c);,因为项目的创建是通过malloc申请的内存空间,如果没有删除的话会持续占用单片机RAM并最后导致RAM不够用。


使用特权

评论回复

打赏榜单

21ic小管家 打赏了 30.00 元 2023-03-13
理由:签约作者奖励

相关帖子

发新帖 本帖赏金 30.00元(功能说明)我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1257

主题

10849

帖子

51

粉丝