STM32 Json 字符的创建和解析
STM32处理json字符串一般不常见,大部分都是不需要处理的数据,但是在一些通信中需要处理上传或者下传的数据,就别比如在物联网中,有一部分数据就是以json格式传输的,那么就需要对数据经行解析。我简单记录一下我自己在STM32F103RC中使用jansson库的一些注意事项和出现的错误,文末我会附上我自己的工程文件和下载的jansson库文件,以便哪些因为网络原因无法下载的人使用。
1、Json简介
一、JSON:JavaScript Object Notation的简写,是一种轻量级数据交换格式。
二、数据类型:标量、序列(数组)、映射(key-value)
三、JSON的四个原则
1 、并列数据之间用逗号隔开
2、 映射用冒号:来表示
3 、并列数据的集合用中括号[]来表示
4、 映射的集合用大括号{}来表示
如下形式:
{
"name": "John Doe",
"age": 18,
"address": {
"country" : "china",
"zip-code": "10000"
}
}
四、JSON的优点
1、 数据格式比较简单,格式是压缩的,占用带宽小
2、 支持Python等服务器端语言,便于服务器解析
2、jansson库的下载安装和报错解决
Jansson官网:http://jansson.readthedocs.io/en/latest/
Jansson API文档:http://jansson.readthedocs.io/en/latest/apiref.html
关于Jansson库的更多使用请查看官方文档。
2.1、下载安装
jansson库是有Keil版本的官方的,可以直接在官网下载,官网链接,下载安装就可以使用了,但是还会遇到其它问题。记录一下我自己的问题。
下载下来的文件:
2.2、STM32工程文件中导入jansson库
打开自己的工程文件,我自己使用的是正点原子的工程文件。
按照下面的顺序选择,就能看到第4布那个了,说明库文件已经添加成功。
2.3、报错解决
添加了库函数之后出现如下报错,经过一番查找,终于找到了原因并且解决了。
对于报错,…\OBJ\Jansson_Test.axf: Error: L6915E: Library reports error: __use_no_semihosting was requested, but _ttywrch was referenced。
在usart.c串口通信文件之中添加如下所示代码即可。
添加代码:
//__use_no_semihosting was requested, but _ttywrch was
void _ttywrch(int ch)
{
ch = ch;
}
对于报错,…\OBJ\Jansson_Test.axf: Error: L6915E: Library reports error: __use_no_semihosting was requested, but _sys_open was referenced。
勾选Use MicroLIB 。
2.4、修改堆栈空间
修改启动文件里面的堆栈范围,防止在程序运行过程中空间不足出现死机。
3、Json 字符的创建
//jansson Test
void jansson_pack_test(void)
{
json_t *root; // json_t用于引用任何JSON节点
char *out;
/* Build an empty JSON object */
root = json_pack("{}");
out = json_dumps(root, JSON_ENCODE_ANY);
printf("out:%s\r\n", out);
json_delete(root);
free(out);
/* Build the JSON object {"foo": 42, "bar": 7} */
root = json_pack("{sisi}", "foo", 42, "bar", 7);
out = json_dumps(root, JSON_ENCODE_ANY);
printf("out:%s\r\n", out);
json_delete(root);
free(out);
/* Like above, ':', ',' and whitespace are ignored */
root = json_pack("{s:i, s:i}", "foo", 42, "bar", 7);
out = json_dumps(root, JSON_ENCODE_ANY);
printf(</