嵌入式的数据交换格式Json——CJson
Json是常用语互联网的数据传输格式,在网页和后台中常常被使用,物联网领域也是最常用的,在使用NB的一些领域(对流量要求没那么高的)也会使用Json格式,这次来讲讲物联网嵌入式使用的Json—CJson,LiteOS在是使用MQTT和PC交互时,常常使用的就是Cjson文件格式
1、Json是啥
JSON(JavaScript Object Notation,JavaScript对象表示法,读作/ˈdʒeɪsən/)是一种由道格拉斯·克罗克福特构想和设计、轻量级的资料交换语言,该语言以易于让人阅读的文字为基础,用来传输由属性值或者序列性的值组成的数据对象。尽管JSON是JavaScript的一个子集,但JSON是独立于语言的文本格式,并且采用了类似于C语言家族的一些习惯。
JSON数据格式与语言无关。即便它源自JavaScript,但目前很多编程语言都支持; JSON格式数据的生成和解析。
2、JSON的基本数据类型:
- 数值:十进制数,不能有前导0,可以为负数,可以有小数部分。还可以用e或者E表示指数部分。不能包含非数,如NaN。不区分整数与浮点数。JavaScript用双精度浮点数表示所有数值。
- 字符串:以双引号""括起来的零个或多个Unicode码位。支持反斜杠开始的转义字符序列。
- 布尔值:表示为true或者false。
- 值的有序列表(array):有序的零个或者多个值。每个值可以为任意类型。序列表使用方括号[,]括起来。元素之间用逗号,分割。形如:[value, value]
- 对象(object):若干无序的“键-值对”(key-value pairs),其中键是数值或字符串。建议但不强制要求对象中的键是独一无二的。对象以花括号{开始,并以}结束。键-值对之间使用逗号分隔。键与值之间用冒号:分割。
- null类型:值写为null。
3、Json的应用
- web开发:Json 防范应用于JavaScrpt、Java、Node.Js应用上,在PHP和C#开发WEB应用可开始已经有使用,仅次于XML的应用
- NoSQL数据库:NoSQL数据库一般也用JSON格式才存储数据。
4、Json存储格式
[
{
"text": "This is the text",
"color": "dark_red",
"bold": "true",
"strikethough": "true",
"clickEvent":
{
"action": "open_url",
"value": "zh.wikipedia.org"
},
"hoverEvent":
{
"action": "show_text",
"value":
{
"extra": "something"
}
}
},
{
"translate": "item.dirt.name",
"color": "blue",
"italic": "true"
}
]
用【】、{}字段:数据 的形式保存数据,既方便读取,也方便了解析。
5、CJson是什么呢?
cJSON是使用C语言编写,用来创建、解析JSON文件的库。cJSON特点就是工程文件简单,提供函数接口功能全,麻雀虽小五脏俱全,使用起来也很方便。
LiteOS的Cjson解析文件的目录是
LiteOS/ components / lib / cjson / cJSON-1.7.14
这里LiteOS使用的开源的cJson解析器,遵照Dave Gamble (original author)的设计和使用
6、CJson的解析数据结构和API
- cJSON核心结构体
/* The cJSON structure: */ typedef struct cJSON { struct cJSON *next,*prev; /* next/prev allow you to walk array/object chains. Alternatively, use GetArraySize/GetArrayItem/GetObjectItem */ struct cJSON *child; /* An array or object item will have a child pointer pointing to a chain of the items in the array/object. */ struct cJSON *parent; /* parent tracing */ const char** vars; int type; /* The type of the item, as above. */ char *decvalstring; /* decoded string of this item */ char *valuestring; /* The item's string, if type==cJSON_String */ int valueint; /* The item's number, if type==cJSON_Number */ double valuedouble; /* The item's number, if type==cJSON_Number */ char *string; /* The item's name string, if this item is the child of, or is in the list of subitems of an object. */ } cJSON;
- 解析函数
按照cJSON结构体的结构序列化整个数据包,并在堆中开辟一块内存存储cJSON结构体cJSON *cJSON_Parse(const char *value);
- 获取指定字段内得值
cJSON *cJSON_GetObjectItem(cJSON *object,const char *string);
- 将CJons数据格式转换成Json字符串
char *cJSON_Print(cJSON *item);
- 后去Json数组格式对象的数量
int cJSON_GetArraySize(cJSON *array);
7、LiteOS编译CJSON
LiteOS编译CJOSN需要
CJSON_VERSION = cJSON-1.7.14
COMPONENTS_CJSON_INCLUDE = \
-I $(LITEOSTOPDIR)/components/lib/cjson/$(CJSON_VERSION)
将解析构建文件包含到系统中,然后就是用上面的API了。
- 点赞
- 收藏
- 关注作者
评论(0)