2016-11-07 4 views
0

C 배열에 대한 질문이 json 배열을 어떻게 cJSON json 구문을 사용하여 C 알고 있지만 json 배열을 구문 분석하는 방법에 대한 Google에서 어떤 결과를 찾을 수 없습니다, 나는 Using cJSON to read in a JSON array, 봤지만 내게 어울리지 않는다. cJSON이 json 배열을 구문 분석하는 방법은 무엇입니까?

나는 웹 API에서 JSON 배열을 받아 봐 그리고는 다음과 같습니다 : 보시다시피

[{\"id\":\"25139\",\"date\":\"2016-10-27\",\"name\":\"Komfy Switch With Camera DKZ-201S\\/W Password Disclosure\"},{\"id\":\"25117\",\"date\":\"2016-10-24\",\"name\":\"NETDOIT weak password Vulnerability\"}] 

하는 배열에 많은 JSON이있다, 그래서, 내가 어떻게 cJSON lib 디렉토리와 배열을 분석 할 수 있습니까?

+0

샘플이 유효한 JSON이 아닙니다. 기본적으로 모든 역 슬래시는 유효하지 않습니다. 이것은 artifcat이 C 스타일을 이스케이프 처리하는 문자열을 보여주는 디버거에서 복사 한 것입니까? – Codo

+0

네, 맞아요, gdb에서 복사하고, 컬을 사용하여 데이터를 다운로드 할 때 "\"가 없으므로 다음과 같습니다 : –

+0

[{ "id": "6792", "date": "2010-01-29", "name": "Discuz! 6.0.0 크로스 사이트 스크립팅"}, { "id": "7570", "date": "2009-09-17", "name": " Discuz! Plugin Crazy Star 2.0 (fmid) SQL 주입 취약점 ","id ":"7619 ","date ":"2009-09-15 ","name ":"Discuz! JiangHu 플러그인 버전 1.1 및 ("id": "7779", "날짜": "2009-08-25", "이름": "Discuz 6.0 (2fly_gift.php) Sql 주입 취약점"), { "id" : "7878", "날짜": "2009-08-19", "이름": "Discuz! 원격 재설정 사용자 암호 악용"} –

답변

1

cJSON은 전체 범위, 즉 JSON 배열과 객체를 모두 지원합니다. 데이터에 액세스 할 때 현재 조각의 유형이 무엇인지 이해할 필요가 있습니다.

귀하의 경우, 간단한 값을 가진 객체를 포함하는 배열입니다. 그래서 이것을 어떻게 처리 할 것인가 :

int i; 
cJSON *elem; 
cJSON *name; 
char *json_string = "[{\"id\":\"25139\",\"date\":\"2016-10-27\",\"name\":\"Komfy Switch With Camera DKZ-201S\\/W Password Disclosure\"},{\"id\":\"25117\",\"date\":\"2016-10-24\",\"name\":\"NETDOIT weak password Vulnerability\"}]"; 
cJSON *root = cJSON_Parse(my_json_string); 
int n = cJSON_GetArraySize(root); 
for (i = 0; i < n; i++) { 
    elem = cJSON_GetArrayItem(root, i); 
    name = cJSON_GetObjectItem(elem, "name"); 
    printf("%s\n", name->valuestring); 
} 

나는 그것을 편집하지 않았다. 너무 멀지 않았 으면 좋겠다.

+0

감사합니다. –

관련 문제