2011-12-29 3 views
0

중첩 된 JSON 출력을 구문 분석하는 방법을 잘 모르겠습니다. Googles JSON 지오 코딩을 사용하고 좌표를 추출하려고합니다. 나는 다른 수준의 파싱이 필요하다고 생각하고있다. 작동하지 않는 내 코드 :IPhone Google JSON Geocoing 구문 분석

hostStr = [hostStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 

NSURL *hostURL = [NSURL URLWithString:hostStr]; 
NSString *jsonString = [[NSString alloc] initWithContentsOfURL:hostURL]; 

self.jsonArray = [jsonString JSONValue]; 

NSDictionary *coordinates = [self.jsonArray objectForKey:@"id:p1"]; 
NSLog(coordinates); 
NSString *point = [coordinates objectForKey:@"Point"]; 
NSLog(point); 

json으로는 :

{ 
"name": "11111 WASHINGTON AVE # 116 SAN PEDRO, CA 91111", 
"Status": { 
"code": 200, 
"request": "geocode" 
}, 
"Placemark": [ { 
"id": "p1", 
"address": "11111 Washington Ave, San Pedro, CA 91111, USA", 
"AddressDetails": { 
"Accuracy" : 8, 
"Country" : { 
    "AdministrativeArea" : { 
    "AdministrativeAreaName" : "CA", 
    "Locality" : { 
     "LocalityName" : "San Pedro", 
     "PostalCode" : { 
      "PostalCodeNumber" : "91111" 
     }, 
     "Thoroughfare" : { 
      "ThoroughfareName" : "Washington Ave" 
     } 
    } 
    }, 
    "CountryName" : "USA", 
    "CountryNameCode" : "US" 
} 
}, 
"ExtendedData": { 
    "LatLonBox": { 
    "north": 37.7026153, 
    "south": 37.6999173, 
    "east": -122.1393925, 
    "west": -122.1420904 
    } 
}, 
"Point": { 
    "coordinates": [ -122.1407313, 50.7012704, 0 ] 
} 
} ] 
} 

답변

1

그것은 당신이 분석 된 JSON에서 중첩 된 객체에 도달하는 방법에 대한 불분명 한 것처럼 보인다. NSString에서 JSONValue 카테고리를 얻으려면 JBJson (이전 Json-Framework)을 사용하고 있다고 가정합니다. 그렇다면 전체 거래가 파싱되므로 그냥 걸어야합니다.

유용한 온라인 온라인 json 시각화 도우미 http://jsonviewer.stack.hu/
원시 JSON을 붙여 넣어 전체 트리 구조를 볼 수 있습니다.

그러면 값에 NSDictionaries 및 NSArrays가있는 NSDictionary를 가져올 것임을 이해해야합니다. 따라서 여러분이 파고 드는 것은 "id : p1"이 아닙니다. 이러한 좌표가 필요하면 좌표 배열은 Placemark [0] .Point.coordinates 경로에 있습니다.

더처럼 보일 것 :

NSArray *placemarks = [self.jsonArray objectForKey:@"Placemark"]; 
NSDictionary *mark = [placemarks objectAtIndex:0]; 
NSDictionary *point = [mark objectForKey:@"Point"]; 
NSArray *coordinates = [point objectForKey:@"coordinates"]; 

내가 키 패스 또는 뭔가 그것을 걸을 수있을 것보다 더 최근의 Obj-C에서 근무하지만이 방법을했다있다 영리한 사람 여기서 네비게이션하는 중첩 된 객체를 보여줍니다.

+0

아주 좋습니다. 고맙습니다. – savagenoob

+0

나머지 아들이있는 경우 : ( -122.1407313, 37.7012704,) 변수에 객체 ID가없는 첫 번째와 두 번째 좌표를 가져 오려면 어떻게해야합니까? – savagenoob

+0

"좌표"라는 이름의 NSArray에는 코드 샘플 끝에 해당 값이 들어 있습니다. 그래서'objectAtIndex : 0'을 사용하여 위도를 얻고'objectAtIndex : 1'을 사용하여 경도를 얻으십시오. 그것들은 둘 다 float이므로 NSNumber * latitude = [coordinates objectAtIndex : 0];처럼 보일 것입니다. –