我正在创建一个网络请求,根据zip提取lng和lat数据(使用以下网址)
http://maps.google.com/maps/geo?q=50266
这样做我得到了以下的json
{
"name": "50266",
"Status": {
"code": 200,
"request": "geocode"
},
"Placemark": [ {
"id": "p1",
"address": "West Des Moines, IA 50266, USA",
"AddressDetails": {
"Accuracy" : 5,
"Country" : {
"AdministrativeArea" : {
"AdministrativeAreaName" : "IA",
"Locality" : {
"LocalityName" : "West Des Moines",
"PostalCode" : {
"PostalCodeNumber" : "50266"
}
}
},
"CountryName" : "USA",
"CountryNameCode" : "US"
}
},
"ExtendedData": {
"LatLonBox": {
"north": 41.6005010,
"south": 41.5254700,
"east": -93.7347000,
"west": -93.8435030
}
},
"Point": {
"coordinates": [ -93.7353858, 41.5998115, 0 ]
}
} ]
}
我想从中提取的只是坐标部分。这是我当前尝试在我点击下面显示的最后一行时抛出和异常
//after I get the response I turn it into json and this is working
NSArray* json = [items JSONValue];
NSString* coords = [json objectForKey:@"Placemark.Point.coordinates"];
我在这里想要快速拉出坐标是什么?
答案 0 :(得分:3)
整体值返回不是数组,而是字典。请注意,第一个字符是{
。如果是数组,则为[
。
NSDictionary * json = [string JSONValue];
现在,您需要“地标”键下的内容。请注意,这会返回一个数组,因为“Placemarks”键(和冒号)后面的字符是[
。
NSArray * placemarks = [json objectForKey:@"Placemark"];
从这个数组中,您需要第一个元素,即另一个NSDictionary
:
NSDictionary *firstPlacemark = [placemarks objectAtIndex:0];
从这本字典中,你想要字词“Point”下的字典:
NSDictionary *point = [firstPlacemark objectForKey:@"Point"];
从这本词典中,您希望数组位于“坐标”键下:
NSArray * coordinates = [point objectForKey:@"coordinates"];
此时,您拥有包含3个NSNumber
个对象的数组。瞧!
对于高级用户,您可以使用键值编码来获取它:
NSArray * coordinates = [json valueForKeyPath:@"Placemark[0].Point.coordinates"];
虽然除非你清楚地了解那里发生了什么,否则我不建议这样做。
这不起作用。没关系! :)
答案 1 :(得分:1)
请记住“[-93.7353858,41.5998115,0]”不是字符串