2011-12-29 22 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でネストされたオブジェクトに到達する方法については不明だように見えます。私はJBString(以前のJson-Framework)を使用してNSStringのJSONValueカテゴリを取得していると思いますか?もしそうなら、それはすべての取引を解析した、あなたはそれを歩かなければならない。

最初に役立つこのオンライン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

残りのjsonが次のようになっているとします( -122.1407313、 37.7012704、)どのようにしてオブジェクトIDが1番目と2番目の座標を変数にプルするのですか? – savagenoob

+0

「座標」という名前のNSArrayには、コードサンプルの末尾に「座標」という名前が含まれています。だから、 'objectAtIndex:0'を使って緯度を取得し、' objectAtIndex:1'を使って経度を取得してください。それらは両方とも浮動小数点型なので、 'NSNumber * latitude = [coordinates objectAtIndex:0];のようになります。 –