如何从google解析地理定位json for lng和lat在objective-c中

时间:2011-01-19 22:54:02

标签: objective-c json geolocation

我正在创建一个网络请求,根据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"];

我在这里想要快速拉出坐标是什么?

2 个答案:

答案 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]”不是字符串