将cJSON用到STM32f103上
cJSON内存管理使用的是标准库stdlib.h的malloc()free()realloc()动态内存管理函数,我STM32F103使用的是正点原子的malloc.c文件里的myfree() mymalloc()函数
1、修改内容文件Cjson.c
cJSON_Delete(root);//出错 cJSON_GetObjectItemCaseSensitive(testjson, "Mac");//申请内存失败
修改内容:
//被修改部分 //#define internal_malloc malloc //#define internal_free free //#define internal_realloc realloc #define internal_malloc mymalloc #define internal_free myfree #define internal_realloc myrealloc
否则会内存出错。
2、cjson数组问题:
(1){"mac":"1234"} valuestring
(2){"card":["1235","2345"]} ARRAY
(3)注意是双引号 ,否则cJSON_Parse()解析返回的指针参数未null。
3、
cJSON *testjson; cJSON *testjsonmac;// MAC地址 testjson=cJSON_CreateObject();
testjson = cJSON_Parse(my_json_string) testjsonmac=cJSON_GetObjectItemCaseSensitive(testjson, "mac"); cJSON_Delete(testjson);
cJSON_CreateObject()函数内部会动态申请一定字节的内存,所以最后解析完毕之后一定要释放内存cJSON_Delete(testjson),cJSON_Delete()函数内部会调用函数free();testjsonmac的地址时申请了内存的指针testjson指向的那块内存里的其中一个地址,不用为
testjsonmac申请内存。