프로그래밍/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를 얻어낼 수 있습니당~
회사 개발환경에서 한거라 프로젝트 관련 내용 빼느라 좀 이상할 수도 있음;;