背景
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 |
算法11----判断是否为回文词(双端队列判断)
算法10-----分糖果
算法9-----输出全排列(递归)---移除K个数,剩下最小数。
算法8-----罗马字转整数(分治法)
Python数据结构2-----队列和堆
Python数据结构1-----基本数据结构和collections系列
Python笔记22-----高阶函数
10、TV UI
9、创建向后兼容的用
- 最新文章
-
移动web开发------公用css----自己总结
-webkit-text-size-adjust 处理设置字体<12px
定义元素透明度--兼容处理
当你触摸并按住触摸目标时候,禁止系统默认菜单-webkit-touch-call
禁用选择文本功能user-select
实现列表两端完全对其text-aligh:justify 和display:inline-block
Bootstrap 网格系统的工作原理
bootstrap-Glyphicons 字体图标
《ASP.NET1200例》各种类型文件汇总
《ASP.NET1200例》C# WINFORM程序的三层架构如何建立的。