您的位置:首页 > Web前端 > JavaScript

在不知道json格式的情况下如何使用cjson进行解析

2015-05-29 00:36 676 查看
假设我们有一个json字符串,但是我们不知道这个json的组织方式,那么如何进行解析呢,下面就给一个小例子。

1、我们的json串如下:

{
"aStr":    "aaaaaaa",
"subobject_1":    {
"bStr":    "bbbbbbb",
"subobject_2":    {
"cStr":    "ccccccc"
}
},
"xStr":    "xxxxxxx"
}


假设我们只知道这是个json串,不知道这个json都有哪些对象,也不知道这些对象的名字和值,那么现在开始进行解析。

2、先用cjson把这个字符串解析成cjson能识别的存储方式:

假设我们这个字符串叫xjson,解析的代码如下:

char * xjson =
"{\
\"aStr\": \"aaaaaaa\", \
\"subobject_1\": \
{ \
\"bStr\": \"bbbbbbb\", \
\"subobject_2\": \
{\
\"cStr\": \"ccccccc\"\
} \
}, \
\"xStr\": \"xxxxxxx\" \
}";
cJSON * pJson = cJSON_Parse(xjson);


先判断xjson是什么类型的,再根据不同的类型进行解析:

#include <string.h>
#include <stdio.h>
#include "cJSON.h"

void printntab(int iCnt)
{
int i = 0;
for(i = 0; i < iCnt; i++)
{
printf("\t");
}
}

int parseJson(cJSON * pJson, int iCnt)
{
if(NULL == pJson)
{
return -1;
}
switch(pJson->type)
{
case cJSON_False :
{
printf("%s : %d\n", pJson->string, pJson->valueint);
}
break;
case cJSON_True :
{
printf("%s : %d\n", pJson->string, pJson->valueint);
}
break;
case cJSON_NULL :
{
printf("%s : NULL\n", pJson->string);
}
break;
case cJSON_Number :
{
printf("%s : %d | %lf\n", pJson->string, pJson->valueint, pJson->valuedouble);
}
break;
case cJSON_String :
{
printf("%s : %s\n", pJson->string, pJson->valuestring);
}
break;
case cJSON_Array  :
case cJSON_Object :
{
int iSize = cJSON_GetArraySize(pJson);
int i = 0;
iCnt++;
printf("%s : {\n", NULL == pJson->string ? "" : pJson->string);
for(i = 0; i < iSize; i++)
{
printntab(iCnt);
cJSON * pSub = cJSON_GetArrayItem(pJson, i);
parseJson(pSub, iCnt);
}
printntab(iCnt);
printf("}\n");
}
break;
default :
return -1;
break;
}
}

int main()
{
char * xjson =
"{\
\"aStr\": \"aaaaaaa\", \
\"subobject_1\": \
{ \
\"bStr\": \"bbbbbbb\", \
\"subobject_2\": \
{\
\"cStr\": \"ccccccc\"\
} \
}, \
\"xStr\": \"xxxxxxx\" \
}";
cJSON * pJson = cJSON_Parse(xjson);
if(NULL == pJson)
{
return -1;
}
parseJson(pJson, 0);
}


编译:

$ g++ -o main main.cpp cjson.c
main.cpp: In function ‘int main()’:
main.cpp:73:3: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]


运行结果:

$ ./main
: {
aStr : aaaaaaa
subobject_1 : {
bStr : bbbbbbb
subobject_2 : {
cStr : ccccccc
}
}
xStr : xxxxxxx
}


大功告成!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: