开源项目之-----JSON (cJSON ,cajun)
最近做项目用到了几个开源项目,现在记录下来:
JSON(JavaScriptObjectNotation)是一种轻量级的数据交换语言,以文字为基础,且易于让人阅读。尽管JSON是Javascript的一个子集,但JSON是独立于语言的文本格式,并且采用了类似于C语言家族的一些习惯。
JSON官方说明文档:http://www.json.org/json-zh.html
JSON 是基于纯文本的数据格式。由于 JSON 天生是为 JavaScript 准备的,因此,JSON 的数据格式非常简单,您可以用 JSON 传输一个简单的 String,Number,Boolean,也可以传输一个数组,或者一个复杂的 Object 对象。
JSON数据类型:
表示字符串String : "abc" (注",\,/,\b,\f,\n,\r,\t),用又引号引起来的字符串
表示数值: 12345(整数)
-3.9e10(浮点数)
表示Boolean: true or false
表示数组: ["abc",12345,false,null] //用 [ ] 包含所有元素
表示对象(key-value对):
{ "city":"Beijing","street":" Chaoyang Road ","postcode":100025 } //地址对象
{ "name":"Michael","address":
{ "city":"Beijing","street":" Chaoyang Road ","postcode":100025}
} //人对象(复杂的对象可以嵌套)
技持JSON的库:(有很多种语言版本的库,我这只写C/C++的)
C语言:cJSON (CJSON 是一个单文件的开源库,只有一个.C文件 。http://sourceforge.net/projects/cjson/)
C++语言:CAJUN (CAJUN是C++的开源库,本文没写)
下面我们将简要介绍如何使用开源工具 cJSON 来完成对 JSON 格式数据的处理。
下面一个例子介绍了使用方法 cJSON_Parse 来解析 JSON 数据字符串并转成数据对象 cJSON,通过 cJSON_GetObjectItem 方法得到你想要的数据项。请看清单 1 所示:
清单 1. 将 JSON 字符串转换为数据对象 cJSON
char *document =
"{\"entry\":{\"name\":\"Andew\",\"phone\":\"555 123 456\"}}";
char *result = NULL;
cJSON *root;
cJSON *label;
root = cJSON_Parse(document);// 将字符型数据转换为 cJSON 型
label = cJSON_GetObjectItem(root,"entry");// 通过已知的名称,得到对应值
result = cJSON_Print(label);// 将 cJSON 数据转换成 char 型
printf("the result is %s\n",result); // 打印输出结果
使用 cJSON_Print 方法把 cJSON 数据对象 label 转换为字符串,结果如下图所示:
the result is {
"name": "Andew",
"phone": "555 123 456"
}
当然,你也可以使用 cJSON.h 当中的方法来创建 JSON 格式的数据字符串。首先使用方法 cJSON_CreateObject 来创建根节点,然后使用 cJSON_AddItemToObject 添加你想创建的数据项。下面一个例子就是如何生成 JSON 字符串 {"entry ":{"name":"Andrew","phone":"555 123 456"} }。请看清单 2所示:
清单 2. 使用 cJSON 当中的方法创建 JSON 数据
cJSON *root = cJSON_CreateObject();// 定义根节点
cJSON *entry = cJSON_CreateObject();// 定义 entry 节点
cJSON *value = cJSON_CreateString("Andew");// 将字符串创建为 cJSON 数据
cJSON_AddItemToObject(root, "entry",entry);// 创建 JSON 数据:name 为 entry ,value 储存在 entry 中,
cJSON_AddItemToObject(entry,"name", value);
value = cJSON_CreateString("555 123 456");
cJSON_AddItemToObject(entry, "phone", value);
char *result = cJSON_Print(root);// 将 JSON 数据转化为字符串;
printf("the result is :%s\n",result); // 打印输出结果
使用 cJSON_Print 方法把 cJSON 数据对象 root 转换为
字符串并打印出来,结果如下图所示:
the result is :{
"entry": {
"name": "Andew",
"phone": "555 123 456"
}
}
更多推荐
所有评论(0)