2014-10-07 4 views
-1

JSON 응답 (이하 첨가)처럼받은 :중첩 된 JSON 응답에서 특정 값을 가져 오는 방법은 무엇입니까?

response : { 

    A = { 
      latitude = "0"; 
      longitude = "0"; 

      }; 

    B = { 
      latitude = "0"; 
      longitude = "0"; 

      }; 
} 

내가 위도, 걷고의 A, B, C, ...의 값을 얻을 필요가있다. 하나의 배열에 저장하십시오. 여기에 valueforkey :@"A" 방법으로 얻을 수 있지만 응답 첫 번째 개체를 모르겠다 1, 2, 3 뭐든간에. 이 문제에 대한 좋은 해결책을 하나주세요.

감사합니다, 아제

+0

음, 먼저 유효한 JSON을 얻으십시오. 위의 코드는'{', 적어도 없습니다. 그런 다음 json.org로 이동하여 JSON 구문을 익히십시오. 그런 다음 JSON을 NSJSONSerialization으로 구문 분석합니다 (위의 예는 이미 '{')가없는 사전의 NSLog이므로이 작업을 완료 한 것입니다. 반환 된 사전에 액세스하여 '응답'을 가져 와서 사전을 반환합니다. 이제 "A"및 "B"사전과 "위도"및 "경도"항목에 액세스 할 수 있습니다. NSLog는 각 단계에서 가지고있는 것을 이해합니다. –

답변

0

NSArray *firstLevelValues = [response allValues]; 
NSArray *lats = [firstLevelValues valueForKey:@"latitude"]; 
NSArray *longs = [firstLevelValues valueForKey:@"longitude"]; 
+0

정말 고마워! – Ajay

0

NSDictionary 2 개 방법 allKeysallValues을보십시오. 그래서 당신은 다음 구문을 응답 객체 사용에 모든 키를 얻고 싶다면 :

NSArray *allKeys = [dict valueForKey:@"response"]; 

당신이 다음 루프에서해서 AllKeys을 반복 위도와 경도의 값을 얻을합니다.

NSDictionary *dict = @{@"response":@{@"A":@{@"latitude":@"0",@"longitude":@"0"}, 
            @"B":@{@"latitude":@"1",@"longitude":@"1"}}}; 

NSDictionary *response = [dict valueForKey:@"response"]; 
NSArray *allKeys = [dict valueForKey:@"response"]; 

for (NSString *keyName in allKeys) { 
    NSLog(@"%@",[response objectForKey:keyName]); 
    NSString *latitude = [[response objectForKey:keyName] objectForKey:@"latitude"]; 
    NSString *longitude = [[response objectForKey:keyName] objectForKey:@"longitude"]; 

} 
+0

그레이트 답변! 고맙습니다 ... – Ajay

+0

루프에서 먼저 NSDictionary * letterDict = response [keyName];을 설정하고 그 다음 행에'letterDict'를 사용해야합니다. 이것은 "최적화"하여 필요한 경우 디버깅 할 수있는 방법을 제공하는 것이 아니라 명령문을 짧게하여 "쉽게 깨뜨릴 수있는"방법입니다. –

+0

@HotLicks 네, 그래도 그렇게 할 수 있습니다. 나는 단지 2 개의 값을 가지고 있기 때문에 그렇게하지 않았습니다. JSON에 더 많은 레벨이 있다면'objectForKeyPath'를 사용할 수도 있습니다. – milanpanchal

관련 문제