forgot 发表于 2023-2-21 14:11

快速了解JSON语法与使用cJSON

本帖最后由 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),而值可以有多种属性,可以是对象、数组、数字、字符串或者三个字面值(false、null、true)。由于值可以是对象,这就决定了键/值对是可以嵌套的。
实际在嵌入式单片机开发的时候,可以通过调用cJSON.c与cJSON.h来快速实现JSON语**能。首先在cJSON.h可以看到cJSON结构体,该结构体是一个双向列表,并可通过*next,*prev遍历链表,通过*child指针访问下一层,其中type变量表达的是数据的类型,*valuestring、valueint、valuedouble代表的就是具体的数据,*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.h、cJSON.c添加到自己的单片机开发工程当中来通过相关函数解析收到的JSON数据包以及将自己的数据包封装成JSON发送给对方,使用的时候一定要注意,在使用中需要学会将不用的JSON进行删除,也就是cJSON_Delete(cJSON *c);,因为项目的创建是通过malloc申请的内存空间,如果没有删除的话会持续占用单片机RAM并最后导致RAM不够用。

页: [1]
查看完整版本: 快速了解JSON语法与使用cJSON