json 형식을 모르는 상황에서 어떻게 cjson을 사용하여 해석하는지

11544 단어 json
만약 우리가 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
", 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

    }

큰일 났다!

좋은 웹페이지 즐겨찾기