【问题标题】:How parse json viewport from Google Places api?如何从 Google Places api 解析 json 视口?
【发布时间】:2015-03-30 13:22:02
【问题描述】:

使用我的 ios 应用程序,我向 google places api 发出请求,我得到如下响应:

{
 "html_attributions" : [],
"result" : {
  "address_components" : [
     {
        "long_name" : "Rome",
        "short_name" : "Rome",
        "types" : [ "locality", "political" ]
     },
     {
        "long_name" : "Rome",
        "short_name" : "Rome",
        "types" : [ "administrative_area_level_3", "political" ]
     },
     {
        "long_name" : "Metropolitan City of Rome",
        "short_name" : "RM",
        "types" : [ "administrative_area_level_2", "political" ]
     },
     {
        "long_name" : "Lazio",
        "short_name" : "Lazio",
        "types" : [ "administrative_area_level_1", "political" ]
     },
     {
        "long_name" : "Italy",
        "short_name" : "IT",
        "types" : [ "country", "political" ]
     }
  ],
  "adr_address" : "\u003cspan class=\"locality\"\u003eRome\u003c/span\u003e, \u003cspan class=\"country-name\"\u003eItaly\u003c/span\u003e",
  "formatted_address" : "Rome, Italy",
  "geometry" : {
     "location" : {
        "lat" : 41.9027835,
        "lng" : 12.4963655
     },
     "viewport" : {
        "northeast" : {
           "lat" : 42.0505462,
           "lng" : 12.7302888
        },
        "southwest" : {
           "lat" : 41.769596,
           "lng" : 12.341707
        }
     }
  },
  "icon" : "http://maps.gstatic.com/mapfiles/place_api/icons/geocode-71.png",
  "id" : "c201ff6d6339dac3b34184b3972b232aa097ff8a",
  "name" : "Rome",
  "place_id" : "ChIJu46S-ZZhLxMROG5lkwZ3D7k",
  "reference" : "CnRoAAAAUe_x9QmJ7kGAAAoyOwa_6vGISj0hy4mvqTJNjNl9TrXqaowyKQCEQov70GTyVidSdNd9wy0MG9UWffjSmi58YG7R3j2Fr9_RoKJCjKgcxwijojmVgFNf5p-8Ja1E53D_YnzW8R0lgtY1xMmOZvxzEBIQ1ruuMP92aFYZs-EJd0McJRoUOaLCDU0K4Dh9nag9wouUAsHqC3g",
  "scope" : "GOOGLE",
  "types" : [ "locality", "political" ],
  "url" : "https://maps.google.com/maps/place?q=Rome,+Italy&ftid=0x132f6196f9928ebb:0xb90f770693656e38",
  "vicinity" : "Rome"
},
"status" : "OK"
}

我用这个代码得到 address_components:

   NSDictionary *ResultDictionary = [body objectFromJSONString];
   for (NSDictionary *q in [[ResultDictionary valueForKey:@"result"]valueForKey:@"address_components"]) {


        NSArray *type=[q valueForKey:@"types"];
        NSArray *long_name=[q valueForKey:@"long_name"];
        NSArray *short_name=[q valueForKey:@"short_name"];
 }

使用相同的逻辑我无法获取几何对象下的视口和位置值,这会导致崩溃,因为键不存在:

 for (NSDictionary *q in  [[ResultDictionary valueForKey:@"result"]valueForKey:@"geometry"] ) {


       NSArray *location=[q valueForKey:@"location"];
   }

似乎json解码只提取了一个字符串而不是几何对象的nsDictionary,这是怎么回事?

【问题讨论】:

  • 你在哪一行遇到了崩溃?
  • 直接用这一行试试,然后检查一次。如果这样做了之后你将能够从这个 Json 响应中获取你的数据。[[[ResultDictionary valueForKey:@"result"]objectForKey:@"geometry"] objectForKey:@"location"]
  • 有了这个我可以得到值 NSMutableDictionary *NewDict=[[[ResultDictionary valueForKey:@"result"]valueForKey:@"geometry"] objectForKey:@"location"];如果您发布答案,我会将其标记为正确
  • 如果您对我的回答感到满意,请也投赞成票。在此先感谢

标签: ios iphone json google-api google-places-api


【解决方案1】:

将此添加到您的代码中,并根据您的要求从JSON获取您的价值

NSMutableDictionary *NewDict=[[[ResultDictionary valueForKey:@"result"]valueForKey:@"geometry"] objectForKey:@"location"];

NSString *lat=[NewDict objectForKey:@"lat"];
NSString *lng =[NewDict objectForKey:@"lng"];

我希望这段代码对你有用。

【讨论】:

  • @user31929 检查这个答案
【解决方案2】:

您的“几何”节点包含两个字典,其中只有一个具有“位置”节点,这就是它崩溃的原因(您要求他们两个都返回键“位置”的值而不先检查是否有一)。提供的答案将解决您的问题,只需直接钻到“位置”部分而不进行迭代,您就会得到您的值。

考虑到您已经得到答案,您可能会通过使用更高级别的 JSON 库(例如:http://www.jsonmodel.com/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-31
    • 2017-08-28
    • 2012-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多