개발 기록일지

c에서 Json 파싱하기 json-c 본문

프로그래밍/C++ , C

c에서 Json 파싱하기 json-c

JuoDev 2020. 7. 7. 14:30

httprequest -get  을 통해서 Json 형태의 데이터를 가져와야해서 구글링을해서 작업해보았당

 

Json 이  [ ]  배열형태로 오는 경우여서 그거에 맞게 작업함

 

resultData 에 json 형태의 데이터가 현재 담겨있는 경우고

 

[ {

   "test" : {

                "" : "", 

                    …

                "" : ""

             },

   "test2":[ ],

   "test3":" ",

   "test4":{

                 

             }

} ]

 

이런식으로 배열안에  오브젝트가 있고 key-value 형태인데 value가 오브젝트거나 배열인경우 등으로

 

내꺼에 맞게 만들어봤다. JSON 가지고 노는게 첨인데 암튼 넘 헷갈렸음

int JsonParsing( char *resultData)
{
    //request 했을때 오는 [] 배열 혈태의 json parsing 시작
    
    string jsonStr = resultData;
    enum json_type type;
    json_object *jobj = json_tokener_parse((char *)jsonStr.c_str());
    
    json_object *array_json;
    
    array_json=json_object_array_get_idx(jobj,0);
    //0번째 element (object) 담기
    
    string tag,strVal;
    
    
    json_object_object_foreach(array_json,key,val){
 
    type=json_object_get_type(val);
    switch(type){
        case json_type_boolean:
        case json_type_double:
        case json_type_int:
        case json_type_string:
            tag=key;
            strVal=json_object_get_string(val);
            printf("%s %s",tag.c_str(),strVal.c_str());
        case json_type_object:
            JsonParse_Object(val);
            break;
        case json_type_array:
            JsonParse_Array(val);
            break;
    }//switch
}//json_object_object_foreach(array_json,key,val)

return 1;
}

 

 

value 가 object 형이거나 array 일때 어떻게 처리할지를 정한 함수

 

결국 value가 array면  array 안의 object 를 처리해야하기 때문에 최종적으로 object 처리로 가게됨

void JsonParse_Object(json_object *jobj)
{
    enum json_type type;
    string tag,strVal;
    int intVal;
    double doubleVal;

    //get key ,val
    json_object_object_foreach(jobj,key,val){
        type=json_object_get_type(val);
        switch(type){
            case json_type_boolean:
                tag=key;
                intVal=json_object_get_boolean(val);
                printf("%s , %d",tag.c_str(),intVal);         
                break;
            case json_type_int:
                tag=key;
                intVal=json_object_get_int(val);
                printf("%s , %d",tag.c_str(),intVal);
                break;
            case json_type_double:
                tag=key;
                doubleVal=json_object_get_double(val);
                printf("%s , %lf",tag.c_str(),doubleVal);
                break;
            case json_type_string:
                tag=key;
                strVal=json_object_get_string(val);
                printf("%s , %s",tag.c_str(),strVal.c_str());              
                break;
    }
    }
}
void JsonParse_Array(json_object *jobj)
{
    enum json_type type;
    int array_len=json_object_array_length(jobj);
    for(int i=0;i<array_len;i++){
        json_object *val_array;
        val_array=json_object_array_get_idx(jobj,i);
        JsonParse_Object(val_array);
    }
}

 

foreach 문에서 돌면서 printf 를 통해 key 랑 value를 얻어낼 수 있습니당~

 

회사 개발환경에서 한거라 프로젝트 관련 내용 빼느라 좀 이상할 수도 있음;;

 

 

'프로그래밍 > C++ , C' 카테고리의 다른 글

MultiThread 환경에서 Curl 사용시 문제  (0) 2021.04.28