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 解析的主要内容,如果未能解决你的问题,请参考以下文章
Google Pass 标签未显示在 iPhone 上的 Google Pay 应用中