2012-12-17 8 views
0

내 애플리케이션에서 NSMutableData *receivedData을 반환합니다.구문 분석 JSON : 객체 존재 확인 및 값 읽기

NSJSONSerialization을 사용하여 가장 쉬운 가정하에이를 구문 분석하도록 선택했습니다. 나는 그것을하는 방법 주위에 내 머리를 얻으려고 극단적 인 문제가 있습니다. Java 배경에서 Objective-C를 처음 접했습니다.

자바에서는 gson을 사용하여 쉽게 사용할 수있는 배열로 JSON을 구문 분석했습니다. 나는 이것에 정말로 고투하고있다. JSON을 구문 분석

내 현재 코드는 다음과 같습니다

NSError *e = nil; 
    NSArray *jsonArray = [NSJSONSerialization JSONObjectWithData: receivedData options: NSJSONReadingMutableContainers error: &e]; 

    if (!jsonArray) { 
     NSLog(@"Error parsing JSON: %@", e); 
    } else { 
     for(NSDictionary *item in jsonArray) { 
      NSLog(@"Item: %@", item); 
     } 
    } 

인터넷에서 누군가에 의해 제공. 그러면 NSLog에 두 개의 항목이 인쇄됩니다. resultheader. 여기에 JSON이 모습입니다 :

그러나 JSON도 같이 할 수있는 오류가 발생하면
{ 
    "header":{ 
    "session":"sessionid", 
    "serviceVersion":"1", 
    "prefetchEnabled":true 
    }, 
    "result":"50ce82401e826" 
} 

:

  1. 확인 : 나는 코드가 작동 할 방법

    { 
        "header":{ 
        "session":"sessionid", 
        "serviceVersion":"1", 
        "prefetchEnabled":true 
        }, 
        "fault":{ 
        "code":0, 
        "message":"someErrorCode" 
        } 
    } 
    

    "fault"객체가있는 경우

  2. 있을 경우 fault.code 및 fault.message를 NSLog에 인쇄하십시오.
  3. If 내 JSON 대신 오류
  4. 인쇄 NSLog

에 결과 값의 결과를 포함 것을 알고하지만 내 인생은 접근하는 방법을 알아낼 수 없습니다를 들어,이 없다. 누군가 포인터를 좀 주시겠습니까?

+0

'jsonArray'는 NSArray가 아니라 'NSDictionary'입니다. 그건 그렇고, 이것은 매우 간단합니다 :'fault' 키에 해당하는 객체가'nil '인지 확인하십시오. –

+0

예, 문서를 읽는 것으로부터 알 수있는 한, 모든 객체 (예 :'header'와'fault')는'NSDictionary'입니까? 그렇다면'result'는'NSString'일까요? –

+0

@ jordanmoore 네, 그렇습니다. –

답변

0

개체가 사전 인 것처럼 보입니다.

시험해보세요.

NSError *e = nil; 
id jsonObj = [NSJSONSerialization JSONObjectWithData: receivedData options: NSJSONReadingMutableContainers error: &e]; 

NSArray *jsonArray = nil; 
NSDictionary *jsonDict = nil; 

if ([jsonObj isKindOfClass:[NSArray class]]){ 
    jsonArray = (NSArray*)jsonObj; 
} 
else if ([jsonObj isKindOfClass:[NSDictionary class]]){ 
    jsonDict = (NSDictionary*)jsonObj; 
} 

if (jsonArray != nil) { 
    // you have an array; 
    for(NSDictionary *item in jsonArray) { 
     NSLog(@"Item: %@", item); 
    } 
} 
else if (jsonDict != nil){ 
    for (NSString *key in jsonDict.allKeys){ 
     NSLog(@"Key: %@ forItem: %@",key,[jsonDict valueForKey:key]); 
    } 
} 
else { 
    NSLog(@"Error: %@",e); 
} 
+0

감사합니다.이 코드는 제가해야 할 일에 접근하는 방법을 완벽하게 보여줍니다. :) –