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不够用。
---------------------
作者:forgot
链接:https://bbs.21ic.com/icview-3285428-1-1.html
来源:21ic.com
此文章已获得原创/原创奖标签,著作权归21ic所有,任何人未经允许禁止转载。