1.json的基本知识,别问我,我也不熟。
2.cJSON,从网上下的,原地址我也忘了。最后会附上附件源码。
cJSONFiles.zip
3.功能,cJson实现比较简单,接口提供的很全面,所有文件就一个源文件和一个头文件,便于移植和使用。其中包括一个测试demo
4.格式解析,假设从http收到的text内容如下:
从整个数据来看,可以先将数据看成:
可以先将text解析成一个json格式的数据:
如果要分别获取三个成员变量的数据可以么? 答案是:没问题。
现在对于一级的内容已经得到了,但是data里面的数据还没有提取出来,并且data中的成员变量数目也不知道,这种数据cJSON接口能够胜任么,答案是:没问题。
我们可以用下面的接口来获取data中的成员数目:
然后就可以循环获取data中的成员。
5.字符串的JSON格式化:
这个demo里面有现成的,很好理解。
总结:cJson的代码很简洁,注释、说明都很清晰,另外cJson的基本数据结构使用的是链表。我在这里没有对cJson进行深入的分析,原因是:我不会。以后看懂了会继续更新。另外原demo我已经找不到了,以后找到了连接也会更新到文章里。
cJson下载链接:
cJSONFiles.zip3.功能,cJson实现比较简单,接口提供的很全面,所有文件就一个源文件和一个头文件,便于移植和使用。其中包括一个测试demo
4.格式解析,假设从http收到的text内容如下:
点击(此处)折叠或打开
- {
- data : [
- {
- plateNum : '鄂A00001',
- type : '1',
- effectiveDuration : 7200,
- },{
- ...
- }
- ],
- statusCode : 200,
- statusMsg : '操作成功'
- }
点击(此处)折叠或打开
-
{
-
data:****
-
statusCode:***
-
statusMsg:***
- }
点击(此处)折叠或打开
-
char *out;cJSON *json;
-
-
json=cJSON_Parse(text);
-
if (!json) {printf("Error before: [%s]\n",cJSON_GetErrorPtr());}
-
else
-
{
-
out=cJSON_Print(json);
-
cJSON_Delete(json);
-
printf("%s\n",out);
-
free(out);
- }
点击(此处)折叠或打开
-
cJSON *retJsonRoot = NULL, *sJsonCode = NULL, *data = NULL;
-
retJsonRoot = cJSON_Parse(text);
-
if(!retJsonRoot){
-
debugE("Cannot parse return data:%s\n", cJSON_GetErrorPtr());
-
goto exit;
-
}
-
sJsonCode = cJSON_GetObjectItem(retJsonRoot, "statusCode");
-
if(!sJsonCode){
-
debugE("Cannot parse return data:%s\n", cJSON_GetErrorPtr());
-
goto exit;
-
}
-
statusCode = sJsonCode->valuestring;
-
if(strcmp(statusCode, "200") != 0){
-
debugE("Check interface Error, statusCode : %s!!\n", statusCode);
-
goto exit;
-
}
-
data = cJSON_GetObjectItem(retJsonRoot, "data");
-
if(!data){
-
debugE("Cannot parse return data:%s\n", cJSON_GetErrorPtr());
-
goto exit;
- }
我们可以用下面的接口来获取data中的成员数目:
点击(此处)折叠或打开
-
/* Retrieve item number "item" from array "array". Returns NULL if unsuccessful. */
- extern cJSON *cJSON_GetArrayItem(cJSON *array,int item)
点击(此处)折叠或打开
-
for(int iv = 0; iv < subNums; iv++){
-
dataObj = cJSON_GetArrayItem(data, iv);
-
if(!dataObj)
-
goto exit;
-
if(cJSON_GetObjectItem(data, "plateNum"))
-
plateNum = cJSON_GetObjectItem(data, "plateNum")->valuestring;
-
-
if(cJSON_GetObjectItem(data, "type"))
-
type = cJSON_GetObjectItem(data, "plateNum")->valuestring;
-
-
if(cJSON_GetObjectItem(data, "effectiveDuration"))
-
effectiveDuration = cJSON_GetObjectItem(data, "effectiveDuration")->valuestring;
- }
5.字符串的JSON格式化:
这个demo里面有现成的,很好理解。
总结:cJson的代码很简洁,注释、说明都很清晰,另外cJson的基本数据结构使用的是链表。我在这里没有对cJson进行深入的分析,原因是:我不会。以后看懂了会继续更新。另外原demo我已经找不到了,以后找到了连接也会更新到文章里。
cJson下载链接: