iPhone Google JSON Geocoing 解析

Posted

技术标签:

【中文标题】iPhone Google JSON Geocoing 解析【英文标题】:IPhone Google JSON Geocoing Parsing 【发布时间】: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 ]

 ]

【问题讨论】:

【参考方案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];

以上是关于iPhone Google JSON Geocoing 解析的主要内容,如果未能解决你的问题,请参考以下文章

iPhone地理编码

在 iPhone 中实现 Google+ 时出错

Google Pass 标签未显示在 iPhone 上的 Google Pay 应用中

是否有任何方法可以通过 Google 凭据登录 iphone 应用程序

将Google地图数据导入iPhone

window.open 用于 Google 地图 - iPhone 上的灰屏 Google Chrome