json 형식을 모르는 상황에서 어떻게 cjson을 사용하여 해석하는지
11544 단어 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
", pJson->string, pJson->valueint);
}
break;
case cJSON_True :
{
printf("%s : %d
", pJson->string, pJson->valueint);
}
break;
case cJSON_NULL :
{
printf("%s : NULL
", pJson->string);
}
break;
case cJSON_Number :
{
printf("%s : %d | %lf
", pJson->string, pJson->valueint, pJson->valuedouble);
}
break;
case cJSON_String :
{
printf("%s : %s
", pJson->string, pJson->valuestring);
}
break;
case cJSON_Array :
case cJSON_Object :
{
int iSize = cJSON_GetArraySize(pJson);
int i = 0;
iCnt++;
printf("%s : {
", 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("}
");
}
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
}
큰일 났다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
콘텐츠 SaaS | JSON 스키마 양식 빌더Bloomreach Content를 위한 JSON Form Builder 맞춤형 통합을 개발합니다. 최근 Bloomreach Content SaaS는 내장 앱 프레임워크를 사용하여 혁신적인 콘텐츠 유형 필드를 구축할...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.