ios - Google Places API 解析特定位置的详细信息

标签 ios objective-c json web-services

我正在创建一个使用 Google Places API 来搜索用户附近地点的应用。当他们点击图钉时,他们会被定向到详细信息页面,显示他们点击的特定位置的详细信息。截至目前,我可以获得地点的名称,但无法获得其他内容,例如“图标”。以下是如何返回 JSON 数据的示例(来自文档):

{
"html_attributions" : [],
"results" : [
  {
     "geometry" : {
        "location" : {
           "lat" : -33.870775,
           "lng" : 151.199025
        }
     },
     "icon" : "http://maps.gstatic.com/mapfiles/place_api/icons/travel_agent-71.png",
     "id" : "21a0b251c9b8392186142c798263e289fe45b4aa",
     "name" : "Rhythmboat Cruises",
     "opening_hours" : {
        "open_now" : true
     },
     "photos" : [
        {
           "height" : 270,
           "html_attributions" : [],
           "photo_reference" : "CnRnAAAAF-LjFR1ZV93eawe1cU_3QNMCNmaGkowY7CnOf-kcNmPhNnPEG9W979jOuJJ1sGr75rhD5hqKzjD8vbMbSsRnq_Ni3ZIGfY6hKWmsOf3qHKJInkm4h55lzvLAXJVc-Rr4kI9O1tmIblblUpg2oqoq8RIQRMQJhFsTr5s9haxQ07EQHxoUO0ICubVFGYfJiMUPor1GnIWb5i8",
           "width" : 519
        }
     ],
     "place_id" : "ChIJyWEHuEmuEmsRm9hTkapTCrk",
     "scope" : "GOOGLE",
     "alt_ids" : [
        {
           "place_id" : "D9iJyWEHuEmuEmsRm9hTkapTCrk",
           "scope" : "APP"
        }
     ],
     "reference" : "CoQBdQAAAFSiijw5-cAV68xdf2O18pKIZ0seJh03u9h9wk_lEdG-cP1dWvp_QGS4SNCBMk_fB06YRsfMrNkINtPez22p5lRIlj5ty_HmcNwcl6GZXbD2RdXsVfLYlQwnZQcnu7ihkjZp_2gk1-fWXql3GQ8-1BEGwgCxG-eaSnIJIBPuIpihEhAY1WYdxPvOWsPnb2-nGb6QGhTipN0lgaLpQTnkcMeAIEvCsSa0Ww",
     "types" : [ "travel_agency", "restaurant", "food", "establishment" ],
     "vicinity" : "Pyrmont Bay Wharf Darling Dr, Sydney"
  },
  {
     "geometry" : {
        "location" : {
           "lat" : -33.866891,
           "lng" : 151.200814
        }
     },
     "icon" : "http://maps.gstatic.com/mapfiles/place_api/icons/restaurant-71.png",
     "id" : "45a27fd8d56c56dc62afc9b49e1d850440d5c403",
     "name" : "Private Charter Sydney Habour Cruise",
     "photos" : [
        {
           "height" : 426,
           "html_attributions" : [],
           "photo_reference" : "CnRnAAAAL3n0Zu3U6fseyPl8URGKD49aGB2Wka7CKDZfamoGX2ZTLMBYgTUshjr-MXc0_O2BbvlUAZWtQTBHUVZ-5Sxb1-P-VX2Fx0sZF87q-9vUt19VDwQQmAX_mjQe7UWmU5lJGCOXSgxp2fu1b5VR_PF31RIQTKZLfqm8TA1eynnN4M1XShoU8adzJCcOWK0er14h8SqOIDZctvU",
           "width" : 640
        }
     ],
     "place_id" : "ChIJqwS6fjiuEmsRJAMiOY9MSms",
     "scope" : "GOOGLE",
     "reference" : "CpQBhgAAAFN27qR_t5oSDKPUzjQIeQa3lrRpFTm5alW3ZYbMFm8k10ETbISfK9S1nwcJVfrP-bjra7NSPuhaRulxoonSPQklDyB-xGvcJncq6qDXIUQ3hlI-bx4AxYckAOX74LkupHq7bcaREgrSBE-U6GbA1C3U7I-HnweO4IPtztSEcgW09y03v1hgHzL8xSDElmkQtRIQzLbyBfj3e0FhJzABXjM2QBoUE2EnL-DzWrzpgmMEulUBLGrtu2Y",
     "types" : [ "restaurant", "food", "establishment" ],
     "vicinity" : "Australia"
  },
  {
     "geometry" : {
        "location" : {
           "lat" : -33.870943,
           "lng" : 151.190311
        }
     },
     "icon" : "http://maps.gstatic.com/mapfiles/place_api/icons/restaurant-71.png",
     "id" : "30bee58f819b6c47bd24151802f25ecf11df8943",
     "name" : "Bucks Party Cruise",
     "opening_hours" : {
        "open_now" : true
     },
     "photos" : [
        {
           "height" : 600,
           "html_attributions" : [],
           "photo_reference" : "CnRnAAAA48AX5MsHIMiuipON_Lgh97hPiYDFkxx_vnaZQMOcvcQwYN92o33t5RwjRpOue5R47AjfMltntoz71hto40zqo7vFyxhDuuqhAChKGRQ5mdO5jv5CKWlzi182PICiOb37PiBtiFt7lSLe1SedoyrD-xIQD8xqSOaejWejYHCN4Ye2XBoUT3q2IXJQpMkmffJiBNftv8QSwF4",
           "width" : 800
        }
     ],
     "place_id" : "ChIJLfySpTOuEmsRsc_JfJtljdc",
     "scope" : "GOOGLE",
     "reference" : "CoQBdQAAANQSThnTekt-UokiTiX3oUFT6YDfdQJIG0ljlQnkLfWefcKmjxax0xmUpWjmpWdOsScl9zSyBNImmrTO9AE9DnWTdQ2hY7n-OOU4UgCfX7U0TE1Vf7jyODRISbK-u86TBJij0b2i7oUWq2bGr0cQSj8CV97U5q8SJR3AFDYi3ogqEhCMXjNLR1k8fiXTkG2BxGJmGhTqwE8C4grdjvJ0w5UsAVoOH7v8HQ",
     "types" : [ "restaurant", "food", "establishment" ],
     "vicinity" : "37 Bank St, Pyrmont"
  },
  {
     "geometry" : {
        "location" : {
           "lat" : -33.867591,
           "lng" : 151.201196
        }
     },
     "icon" : "http://maps.gstatic.com/mapfiles/place_api/icons/travel_agent-71.png",
     "id" : "a97f9fb468bcd26b68a23072a55af82d4b325e0d",
     "name" : "Australian Cruise Group",
     "opening_hours" : {
        "open_now" : true
     },
     "photos" : [
        {
           "height" : 242,
           "html_attributions" : [],
           "photo_reference" : "CnRnAAAABjeoPQ7NUU3pDitV4Vs0BgP1FLhf_iCgStUZUr4ZuNqQnc5k43jbvjKC2hTGM8SrmdJYyOyxRO3D2yutoJwVC4Vp_dzckkjG35L6LfMm5sjrOr6uyOtr2PNCp1xQylx6vhdcpW8yZjBZCvVsjNajLBIQ-z4ttAMIc8EjEZV7LsoFgRoU6OrqxvKCnkJGb9F16W57iIV4LuM",
           "width" : 200
        }
     ],
     "place_id" : "ChIJrTLr-GyuEmsRBfy61i59si0",
     "scope" : "GOOGLE",
     "reference" : "CoQBeQAAAFvf12y8veSQMdIMmAXQmus1zqkgKQ-O2KEX0Kr47rIRTy6HNsyosVl0CjvEBulIu_cujrSOgICdcxNioFDHtAxXBhqeR-8xXtm52Bp0lVwnO3LzLFY3jeo8WrsyIwNE1kQlGuWA4xklpOknHJuRXSQJVheRlYijOHSgsBQ35mOcEhC5IpbpqCMe82yR136087wZGhSziPEbooYkHLn9e5njOTuBprcfVw",
     "types" : [ "travel_agency", "restaurant", "food", "establishment" ],
     "vicinity" : "32 The Promenade, King Street Wharf 5, Sydney"
  }
],
"status" : "OK"

这是我如何获取它的代码:

 NSArray* places = [json objectForKey:@"results"];
NSArray *placeIconArray = [json objectForKey:@"icon"];

for (NSString *imgString in placeIconArray)
{
    NSLog(@"%@", imgString);
}

if ([places count] == 0)
{
    UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Sorry" message:@"Couldn't find any of those places near you" delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:@"Cancel", nil];
    [alertView show];
}


[self plotPositions:places];

我可以很好地绘制这些位置,但是当我在应用程序中放置断点时,imgString 返回 nil。如何正确解析它以便获得 imgString?

感谢所有帮助,提前致谢:)

最佳答案

您没有正确处理数据。 places 包含一个字典数组。这些词典中的每一个都包含一个“图标”。

NSArray* places = [json objectForKey:@"results"];
for (NSDictionary *place in places) {
    NSString *icon = place[@"icon"];
    // do something with the icon URL
}

您可以做的一件事是使用 KVC 获取图标数组:

NSArray *icons = [places valueForKey:@"icon"];

这将从字典数组中创建一个图标值数组。

关于ios - Google Places API 解析特定位置的详细信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25089150/

相关文章:

iOS 8 推送通知声音不适用于此特定案例

javascript - 在 NavigationIOS 中推送 View 时如何传递对象而不是类型?

ios - 如何在 SpriteKit/Objective C 中添加 "Mute Sound"按钮?

php - 在 PHP 中使用 JSON 字符串的 Http 发布请求

php - json_encode、json_decode、数组?

ios - 新 Mac 中的 Pod 设置错误

ios - View Controller 需要时间来加载

iphone - 固定表格 View 部分标题行的任何方法

ios - UIAlertView 事件

c# - 响应正文 json 包含转义字符串