*基于C语言的json数据映射解析库CSON
CSON
基于C语言的json数据映射解析库CSON摘要:1:模型解析工具CSON2:打开KEIL,新建工程3:添加CSON文件到工程并编译4:具体实例应用4.1:声明结构体4.2:定义数据模型4.3:使用CSON来进行解析JSON格式
摘要:
在物联网通讯中,由于经常要跟网络服务数据通讯,在这个过程里面,必须理解JSON格式,( Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。我们把数据JSON封装好之后去做,然后再上传,同时,我们通过上位机或者web进行下发控制的时候,也是以JSON格式来处理,下面讲下基于C语言的json数据映射解析库CSON。在STM32F1最小系统板上来实现处理。
1:模型解析工具CSON
,运行于C语言平台的json-struct的解析库,这个解析库在github上有开源,地址为:
https://github.com/NevermindZZT/cson
2:打开KEIL,新建工程
3:添加CSON文件到工程并编译
将github上下载的两个文件添加到keil工程里面。
然后编译,查看编译结果。
4:具体实例应用
引用GIthub上作者原话, 是一个简单的cJSON的二次封装,相比于使用原生cJSON一层一层解析的方式,CSON采用模型映射的方式,使用模型将结构体的特征进行描述,然后根据模型,将json数据直接解析成结构体,免去使用原生cJSON需要多次调用API的复杂性,可以很大程度减少代码冗余,增加代码逻辑性。所以你会在工程里面看到CJSON文件,下面进行实际操作下。
4.1:声明结构体
/** 项目结构体 */
struct project
{
int id;
char *name;
};
/** 仓库结构体 */
struct hub
{
int id;
char *user;
struct project *cson;
};
4.2:定义数据模型
/** 项目结构体数据模型 */
CsonModel projectModel[] =
{
CSON_MODEL_OBJ(struct project),
CSON_MODEL_INT(struct project, id),
CSON_MODEL_STRING(struct project, name),
};
/** 仓库结构体数据模型 */
CsonModel hubModel[] =
{
CSON_MODEL_OBJ(struct hub),
CSON_MODEL_INT(struct hub, id),
CSON_MODEL_STRING(struct hub, user),
CSON_MODEL_STRUCT(struct hub, cson, projectModel, sizeof(projectModel)/sizeof(CsonModel))
};
4.3:使用CSON来进行解析JSON格式
{
"id": 1,
"user": "Letter",
"cson": {
"id": 2,
"name": "cson"
}
}
void csonDemo(void)
{
char *jsonDemo = "{\"id\": 1, \"user\": \"Letter\", \"cson\": {\"id\": 2, \"name\": \"cson\"}}";
/** 解析json */
struct hub *pHub = csonDecode(jsonDemo, hubModel, sizeof(hubModel)/sizeof(CsonModel));
printf("hub: id: %d, user: %s, project id: %d, project name: %s\r\n",
pHub->id, pHub->user, pHub->cson->id, pHub->cson->name);
/** 释放结构体对象 */
csonFree(pHub, hubModel, sizeof(hubModel)/sizeof(CsonModel));
}
在函数调用之前,还需要进行初始
csonInit(*malloc,*free);
查看串口调试助手信息:
json格式已经解析,这个模块的功能还有很多,也可以编码结构体,将结构体对象序列化成json字符串,大家可以自己去实现处理。是不是很方便,大家可以具体去实现!
- 点赞
- 收藏
- 关注作者
评论(0)