背景
JSON即JavaScript Object Notation,是一种轻量级的数据交换格式。
JSON建构于两种结构:
- “名称/值”对的集合(A collection of name/value pairs)。不同的语言中,它被理解为对象(object),纪录(record),结构(struct),字典(dictionary),哈希表(hash table),有键列表(keyed list),或者关联数组 (associative array)。
- 值的有序列表(An ordered list of values)。在大部分语言中,它被理解为数组(array)。
关于JSON库的性能评测与标准符合程度,可以参照《28 个 C/C++ 开源 JSON 程序库性能及标准符合程度评测》,另一个英文版更详细结果在nativejson-benchmark。
在阅读了一系列评测之后,结合需求(ROM尽量小,RAM尽量小,带处理的数据比较简单),准备研究一下cJSON和json-c。
从JSON官网获得json-c和cJSON的源码地址如下:cJSON和json-c。
下面就基于这两份代码在Ubuntu进行速度和兼容性测试。
测试标的构造对于测试的覆盖以及测试有效性非常重要,所幸的在AOSP中有一个参考AOSP/external/jsoncpp/test。
cJSON
下载代码:
git clone https://github.com/arnoldlu/cJSON.git |
编译安装:
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 <stdio.h> 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
参考文档:《JSON C库的使用》
下载代码:
git clone https://github.com/arnoldlu/json-c.git |
编译安装:
sh autogen.sh ./configure make make install |
如何提高网站的访问速度
CSS透明度大汇总
Microsoft.AlphaImageLoader滤镜讲解
浏览器的渲染原理简介
ACM思维题训练 Section A
CF--思维练习--CodeForces
CF--思维练习--CodeForces
CF--思维练习--CodeForces
CF思维联系--CodeForces