【问题标题】:IPhone Google JSON Geocoing ParsingiPhone Google JSON Geocoing 解析
【发布时间】:2011-12-29 21:04:46
【问题描述】:

我不确定如何解析嵌套的 JSON 输出。我正在使用 Google 的 JSON 地理编码并尝试提取坐标。我想我需要另一个层次的解析。我的代码不起作用:

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 ]
}
} ]
}

【问题讨论】:

    标签: objective-c json cocoa-touch iphone-sdk-3.0


    【解决方案1】:

    您似乎不清楚如何访问解析后的 JSON 中的嵌套对象。我假设您正在使用 JBJson(以前称为 Json-Framework)在 NSString 上获取 JSONValue 类别,是吗?如果是这样,它已经解析了整个交易,您只需步行即可。

    第一个有用的这个在线 json 可视化工具:http://jsonviewer.stack.hu/
    将原始 JSON 粘贴到其中以查看它的整个树结构。

    然后,您应该了解您将获得一个 NSDictionary,其中包含 NSDictionaries 和 NSArrays 的值。因此,您要研究的不是“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 中工作,我可能无法使用 keypath 或其他东西来行走,但我这样做是为了向您展示您在此处真正导航的嵌套对象。

    【讨论】:

    • 如果我剩下的 json 看起来像:( -122.1407313, 37.7012704, 0 ) 如何将没有对象 ID 的第一个和第二个坐标拉到变量中?
    • 您的名为“坐标”的NSArray 包含那些,在我的代码示例的末尾。所以使用objectAtIndex:0 获取纬度,使用objectAtIndex:1 获取经度。它们都是浮点数,所以看起来像NSNumber *latitude = [coordinates objectAtIndex:0];
    猜你喜欢
    • 1970-01-01
    • 2011-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多