本帖最后由 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不够用。
|