Keil自带的json解析

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解析

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值