cJSON是一个超轻巧,携带方便,单文件,简单的可以作为ANSI-C标准的Json格式解析库。
那什么是Json格式?这里照搬度娘百科的说法:
Json(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于JavaScript(Standard ECMA-262 3rd Edition – December 1999)的一个子集。JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C,C++,C#,Java,JavaScript,Perl,Python等)。这些特性使JSON成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成。
更加详细的解释和示例请查看http://www.json.org/主页。
其实简单说,Json就是一种信息交换格式,而cJSON其实就是对Json格式的字符串进行构建和解析的一个C语言函数库。
可以在以下地址下载到cJSON的源代码:
http://sourceforge.net/projects/cjson/
__MACOSX目录是提供给Mac OS的源码,我的机器运行的是Fedora 18,所以选择另外一个目录即可。
简单的阅读下README文件,先学习cJSON库的使用方法。若是连库都还不会使用,分析源码就无从谈起了。通过简单的了解,我们得知cJSON库实际上只有cJSON.c和cJSON.h两个文件组成,绝对轻量级。
不过,代码风格貌似有点非主流,先用indent格式化一下代码吧。我个人喜欢K&R风格的代码,使用的indent命令行参数如下:
1
|
indent-bad-bli0-ce-kr-nsob--space-after-if--space-after-while--space-after-for--use-tabs-i8 |
格式化之后,代码结构看起来清晰多了。
那么,从何处下手来分析呢?打开代码文件逐行阅读么?当然不是了,有main函数的程序大都是从main函数开始分析,那么没有main函数的纯函数库呢?那就自己写main函数呗。
cJSON作为Json格式的解析库,其主要功能无非就是构建和解析Json格式了,我们先写一个构建Json格式字符串的程序,尽可能的使其用到的类型多一点(事实上README文件里提供了不错的示例代码,我们直接借鉴一下吧)。代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
#include <stdio.h> #include <stdlib.h> #include "cJSON.h" intmain(intargc,char*argv[])
{
cJSON*root,*fmt; root=cJSON_CreateObject(); cJSON_AddStringToObject(root,"name","Jack (\"Bee\") Nimble"); fmt=cJSON_CreateObject(); cJSON_AddItemToObject(root,"format",fmt); cJSON_AddStringToObject(fmt,"type","rect"); cJSON_AddNumberToObject(fmt,"width",1920); cJSON_AddFalseToObject(fmt,"interlace"); char*result=cJSON_Print(root); puts(result); free(result); cJSON_Delete(root); returnEXIT_SUCCESS;
}
|
编译运行后(编译时注意要链接数学库,参数行要加-lm),运行结果如下:
1
2
3
4
5
6
7
8
|
{
"name":"Jack (\"Bee\") Nimble",
"format":{
"type":"rect", "width":1920, "interlace":false
}
}
|