2012-12-05 3 views
2

JSON을 반환하는 webservice에 요청하기 위해 NSURLConnection을 사용하는 Xcode 프로젝트가 있습니다.Xcode 4.3.3에서 JSON을 비 직렬화하는 방법

돌아 오는 JSON은 다음과 같습니다 : 내가 사용하여 JSON을 구문 분석하려고

{"d":"{\"Graphic\":{\"HAName\":\"HSName\",\"HALogo\":\"main_menu_top_logo.png\",\"BarColour\":-16744448,\"BarButtonTextColour\":-28444,\"TextColour\":-16744448,\"BackGroundColour\":-23296,\"Error\":\"\"},\"App\":{\"App1\":true,\"App1Title\":\"Application1\",\"App2\":true,\"App2Title\":\"Application2\"Error\":\"\"},\"Version\":25,\"Error\":\"\"}"} 

:

NSDictionary* json = nil; 
if (responseData) 
{ 
    json = [NSJSONSerialization JSONObjectWithData:responseData options:kNilOptions error:nil]; 
} 

을하지만 사전 개체를 볼 때, 그것은 다음과 같습니다

d = "{\"Graphic\":{\"HAName\":\"HSName\",\"HALogo\":\"main_menu_top_logo.png\",\"BarColour\":-16744448,\"BarButtonTextColour\":-28444,\"TextColour\":-16744448,\"BackGroundColour\":-23296,\"Error\":\"\"},\"App\":{\"App1\":true,\"App1Title\":\"Application1\",\"App2\":true,\"App2Title\":\"Application2\"Error\":\"\"},\"Version\":25,\"Error\":\"\"}; 

사전에는 키/값 쌍이 하나만 있습니다.

어떻게 JSON 개체를 올바르게 파싱 할 수 있습니까?

답변

2

문제가 무엇인지 모르겠지만 다른 많은 사전이 포함 된 최상위 사전이 있습니다.

그렇지 않다면 무엇을 기대 했습니까? 이 구조체로부터 배열을 얻지 않을 것입니다.

+0

그래서 중첩 된 사전 객체에 액세스하려면 [[json objectForKey : @ "d"] objectForKey : @ "Graphic"]와 같은 작업을 수행 할 수 있어야합니까? –

+1

@jonnyknowsbest 또는 점 표기법을 통해 중첩 된 객체에 액세스하려면'[json valueForKeyPath : @ "d.Graphic"]'을 사용하십시오. – Alladinian

+0

valueForKeyPath가이 오류를 발생시킵니다. *** 캐치되지 않은 예외 'NSUnknownKeyException'으로 인해 앱을 종료합니다. 이유 : '[<__ NSCFString 0x687a260> valueForUndefinedKey :] :이 클래스는 키 그래픽에 대해 코드 호환 키가 아닙니다.' 내가 이해 못하는 것은 JSON 응답에서 "d"는 이스케이프 처리되지 않은 따옴표를 사용하지만 다른 따옴표는 이스케이프 처리되지 않는다는 점입니다. JSON 파서가 개체를 올바르게 구문 분석하지 못하는 것 같습니다. 나머지 인용문을 어떻게 이스케이프 처리합니까? –

관련 문제