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下载链接: http://sourceforge.net/projects/cjson/files/?source=navbar
3.功能,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下载链接: http://sourceforge.net/projects/cjson/files/?source=navbar