Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- 신고결과받기
- usb 포맷시스템
- Docker
- 데이터넘기기
- maven-install
- 특정ip접근
- LV1
- 파일이 너무 커서 안들어감
- PostgreSQL
- 압축권한
- 2022 KAKAO BLIND RECRUITMENT
- 특정ip차단
- 로또의 최고 순위와 처저 순위
- Linux
- 팰린드롬개수
- ipv6->ipv4
- usb 공간있는데
- 6tunnel
- 도커
- 프로그래머스
- 폴더압축 권한문제
- 방화벽정책
- on conflict
- programmers
- c드라이브에서 압축 안될때
- c드라이브에서 압축
- 관리자권한 문제
- db
- java
- mybatis
Archives
- Today
- Total
개발 기록일지
c에서 Json 파싱하기 json-c 본문
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 |
---|