2013-03-07 4 views
4

나는 NSString "[{"van" : 1,312, "vuan":12,123}]에서 모든 키에 대해이 값을 얻기 위해이, 나는이 일을하고있다 :json 문자열에서 데이터를 읽는 방법은 무엇입니까? 아이폰

NSData *data1 = [jsonResponse1 dataUsingEncoding:NSUTF8StringEncoding]; 
    jsonArray = [NSJSONSerialization JSONObjectWithData:data1 options:kNilOptions error:&err]; 

    self.van = [NSMutableArray arrayWithCapacity:1]; 
    self.vuan = [NSMutableArray arrayWithCapacity:1]; 

    for (NSDictionary *json in jsonArray) { 
     NSString * value = [json objectForKey:@"van"]; 
     [self.van addObject:value]; 
     lbl1.text = value; 

     NSString * value1 = [json objectForKey:@"vuan"]; 
     [self.vuan addObject:value1]; 
     lbl4.text = value1; 
    } 

내가 배열을 사용하지 않아도 될 수 있으며 대신에 직접 NSData 변환 a NSDictionary.

어쨌든 jsonArraynil 인 이유는 모르겠지만, jsonResponse1에 위에 기록한 값이 포함되어 있습니다.

편집 : 내 상사가 잘못 json 문자열을 작성했습니다. 귀하의 제안에 감사드립니다! :)

+2

그리고 그 'NSError' 객체는 사물에 대해 무엇을 말합니까? – trojanfoe

+0

"문자 20 주위의 개체에 값의 문자열 키가 없습니다." –

답변

1

당신은 수비를 코딩 할 필요가 있고 당신은 그들이 발견으로 오류를보고 할 필요가있다. 그래서 오류보고하는 경우

이 우선 JSON 구문 분석이 실패한 경우 확인 : 그 열쇠는 JSON에없는 경우

NSData *data1 = [jsonResponse1 dataUsingEncoding:NSUTF8StringEncoding]; 
jsonArray = [NSJSONSerialization JSONObjectWithData:data1 options:kNilOptions error:&err]; 
if (jsonArray == nil) 
{ 
    NSLog(@"Failed to parse JSON: %@", [err localizedDescription]); 
    return; 
} 

이 두 번째로, objectForKey:nil를 반환 할 것이다 당신이 배열에 그것을 추가 할 때,

for (NSDictionary *json in jsonArray) { 
    NSString * value = [json objectForKey:@"van"]; 
    if (value != nil) 
    { 
     [self.van addObject:value]; 
     lbl1.text = value; 
    } 
    else 
    { 
     NSLog(@"No 'van' key in JSON"); 
    } 

    NSString * value1 = [json objectForKey:@"vuan"]; 
    if (value1 != nil) 
    { 
     [self.vuan addObject:value1]; 
     lbl4.text = value1; 
    } 
    else 
    { 
     NSLog(@"No 'vuan' key in JSON"); 
    } 
} 

그래서 요약 : 런타임 오류는 그래서 당신은 당신이 그들을 처리 할 수 ​​있도록 할 필요가 발생합니다 당신이 피하고 싶은 무언가가 인 예외가 발생합니다. 문제가 발생하면 진단하고 수정할 수 있도록 최대한 많은 정보를보고해야합니다.

관련 문제