STM32使用 jansson 处理 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(</
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值