全部博文(396)
分类: 嵌入式
2018-01-12 09:19:23
JSON即JavaScript Object Notation,是一种轻量级的数据交换格式。
JSON建构于两种结构:
关于JSON库的性能评测与标准符合程度,可以参照《》,另一个英文版更详细结果在。
在阅读了一系列评测之后,结合需求(ROM尽量小,RAM尽量小,带处理的数据比较简单),准备研究一下cJSON和json-c。
从获得json-c和cJSON的源码地址如下:和。
下面就基于这两份代码在Ubuntu进行速度和兼容性测试。
测试标的构造对于测试的覆盖以及测试有效性非常重要,所幸的在AOSP中有一个参考AOSP/external/jsoncpp/test。
git clone |
mkdir build cd build cmake .. -DENABLE_CJSON_UTILS=Off -DENABLE_CJSON_TEST=On -DCMAKE_INSTALL_PREFIX=/usr (生成bin+lib) cmake .. -DENABLE_CJSON_UTILS=Off -DENABLE_CJSON_TEST=On -DCMAKE_INSTALL_PREFIX=/usr -DBUILD_SHARED_LIBS=Off (生成bin) make sudo make install (安装libcjson.so) |
参考文档:《使用 CJSON 在C语言中进行 JSON 的创建和解析的实例讲解》、《cJSON学习笔记》。
下面是一个构造JSON数据,然后解析,打印Type-Key-Value的小示例:
#include
void printJson(cJSON *root)
static char * makeJson(void)
pJsonRoot = cJSON_CreateObject();
p = cJSON_Print(pJsonRoot); cJSON_Delete(pJsonRoot);
return p;
if(NULL == pMsg)
pJson = cJSON_Parse(pMsg);
pSub = cJSON_GetObjectItem(pJson, "hello");
pSub = cJSON_GetObjectItem(pJson, "number");
pSub = cJSON_GetObjectItem(pJson, "bool");
pSub = cJSON_GetObjectItem(pJson, "subobj");
pSubSub = cJSON_GetObjectItem(pSub, "subjsonobj");
cJSON_Delete(pJson);
int main(void)
/* print the version */
p = makeJson(); 构造JSON数据 |
在安装(sudo make install)cJSON之后,编译的时候需要跟上libcjson库文件:
gcc demo.c -o demo -lcjson |
执行结果如下:
Version: 1.3.2
Type=0x10, hello="hello world" |
参考文档:《JSON C库的使用》
git clone |
sh autogen.sh ./configure make make install |