1.下载Keil json库。
下载地址:http://www2.keil.com/mdk5/partnerpacks/ ,下载完以后,双击安装,默认路劲。
2.导入工程
3.测试使用
函数API使用方法参考:https://jansson.readthedocs.io/en/latest/apiref.html#c.json_object_clear
#include "jansson.h" //这是头文件
//jansson Test ,复制贴贴到代码中,直接调用就行了
void jansson_pack_test(void)
{
json_t *root;
char *out;
/* Build an empty JSON object */
root = json_pack("{}");
out = json_dumps(root, JSON_ENCODE_ANY);
printf("out:%s\r\n", out);
free(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);
free(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("out:%s\r\n", out);
free(root);
free(out);
/* Build the JSON array [[1, 2], {"cool": true}] */
root = json_pack("[[i,i],{s:b}]", 1, 2, "cool", 1);
out = json_dumps(root, JSON_ENCODE_ANY);
printf("out:%s\r\n", out);
free(root);
free(out);
/* Build a string from a non-null terminated buffer */
char buffer[4] = {'t', 'e', 's', 't'};
root = json_pack("[s#]", buffer, 4);
out = json_dumps(root, JSON_ENCODE_ANY);
printf("out:%s\r\n", out);
free(root);
free(out);
/* Concatenate strings together to build the JSON string "foobarbaz" */
root = json_pack("[s++]", "foo", "bar", "baz");
out = json_dumps(root, JSON_ENCODE_ANY);
printf("out:%s\r\n", out);
free(root);
free(out);
}
4.发现问题
jansson_pack_test();函数反复调用几次之后出现了堆溢出的情况,具体复现方法如下:
(1)修改jansson_pack_test()函数成如下
这里我的堆空间设置如下
(2)反复执行jansson_pack_test()
经过分析为堆溢出导致,堆栈地址分配我这知识好不充足,需要继续去学习,这里不多做分析
(3)解决,free(root);改成json_delete(root); 反复执行多次就正常了,并且打印每次指针地址也都正常了
5.Json解析