最近做项目用到了几个开源项目,现在记录下来:

JSONJavaScriptObjectNotation)是一种轻量级的数据交换语言,以文字为基础,且易于让人阅读。尽管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"
}
}

GitHub 加速计划 / cj / cJSON
10.45 K
3.16 K
下载
Ultralightweight JSON parser in ANSI C
最近提交(Master分支:2 个月前 )
424ce4ce This reverts commit 5b502cdbfb21fbe5f6cf9ffbd2b96e4281a741e6. Related to #860 4 个月前
32497300 - 5 个月前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐