迭代谷歌放置JSON响应

时间:2016-11-13 06:26:10

标签: javascript json google-maps google-places-api

您好我已经能够从谷歌地方获取JSON响应,并需要从中提取照片参考元素。

我试图迭代场所结果,并且每个场所都会产生photo_reference但我收到错误消息。

TypeError:无法读取属性' 0'或未定义。

我尝试了什么:



    response.on('end', function() {
      var places = JSON.parse(body);
      var locations = places.results;
      
      locations.forEach(function(loc) {
          var photoRef = loc.photos[0].photo_reference;
          console.log('Photo ref ==' + photoRef);
                
      });
    });




以下是JSON响应的示例。



{
   "html_attributions" : [],
   "results" : [
      {
         "geometry" : {
            "location" : {
               "lat" : 46.7725141,
               "lng" : 23.62686099999999
            },
            "viewport" : {
               "northeast" : {
                  "lat" : 46.77284264999999,
                  "lng" : 23.62798785
               },
               "southwest" : {
                  "lat" : 46.77152845000001,
                  "lng" : 23.62348045
               }
            }
         },
         "icon" : "https://maps.gstatic.com/mapfiles/place_api/icons/lodging-71.png",
         "id" : "18ce6ff7131f1ffd9ce9b2558ba407eed7409aee",
         "name" : "Hotel Univers T",
         "photos" : [
            {
               "height" : 1066,
               "html_attributions" : [
                  "\u003ca href=\"https://maps.google.com/maps/contrib/116854836566418330262/photos\"\u003eHotel Univers T\u003c/a\u003e"
               ],
               "photo_reference" : "CoQBdwAAAE6Zi31LvtXmRM0orTBKDbJ3pgENKS82rVyP-462YhvrZAhhiDp2xowEiWsDNPU8tTmkXkhhB2ADKHi5GcptXSDx16GtG6RL9gpmogJw9BIR1JDiWSgMOzIE9xguxAQJ_s6Q9VHv77tQAmukc7JTJmBF_bFKQF3pVcmH6ffuUuiZEhDaF5BmQFqZRyeDOAA0KBkdGhSYpD-28mHr9XOKRb8dTheHJLA5bg",
               "width" : 1069
            }
         ],
         "place_id" : "ChIJPzw_f2oMSUcRNl_Mz_sQS2c",
         "rating" : 4,
         "reference" : "CmRRAAAAGFISd-ET8V96LNII_v7yz5W80IuYIkLPyEPkf2dXWXudbM8YOfzaLDGMV1oNFl2YpN6dWEIDGl4TmAFP2wEYHPklveu-fXdFjUWA-w5cKapzxv0fdhSlSk4HkzpG9YN8EhDuT1KZUzs-O2h_eIjhgu5_GhSND6qUA9VG54QBT3csNWMaG_75Lw",
         "scope" : "GOOGLE",
         "types" : [
            "gym",
            "spa",
            "lodging",
            "health",
            "restaurant",
            "food",
            "point_of_interest",
            "establishment"
         ],
         "vicinity" : "Strada Alexandru Vaida Voevod 53-55, Cluj-Napoca"
      },
      {
         "geometry" : {
            "location" : {
               "lat" : 46.7720145,
               "lng" : 23.6257946
            },
            "viewport" : {
               "northeast" : {
                  "lat" : 46.77209325,
                  "lng" : 23.62638825
               },
               "southwest" : {
                  "lat" : 46.77177825,
                  "lng" : 23.62401364999999
               }
            }
         },
         "icon" : "https://maps.gstatic.com/mapfiles/place_api/icons/restaurant-71.png",
         "id" : "61f80d1a74e00b55a075cacde6fc95aa88bfa83f",
         "name" : "Pizza Hut Iulius Mall",
         "opening_hours" : {
            "open_now" : false,
            "weekday_text" : []
         },
         "photos" : [
            {
               "height" : 2322,
               "html_attributions" : [
                  "\u003ca href=\"https://maps.google.com/maps/contrib/112054611800145890609/photos\"\u003etamara ionescu\u003c/a\u003e"
               ],
               "photo_reference" : "CoQBdwAAAOdAY1sLwHqWZ1sEFvhZrqAoFCNo7DbthSnLMn1aI6lGxmGhfJdE7dLFDsJxjwSyh_0L3F2Mf_-Si12UmJ9CtaySu6SjHrqnaoF1WdafNDNLbkDbqjvesU0FqJid9V8poKU8Hhtb2PAvRe8lkfJF6N1ujIWWOxQlRfhHdjqN_BAAEhCTFmdXtQjfWiC3qbOZO3SqGhTIsansBf4AxGYnt6FnoslOVrqtyw",
               "width" : 4128
            }
         ],
         "place_id" : "ChIJ-0XLwGoMSUcR87bDPcmCLHI",
         "price_level" : 1,
         "rating" : 4.1,
         "reference" : "CmRRAAAAby6PokNes7fY7vSBVfxZvOfZj5wehpXYD8oUFAYRgmyOwreZ-hsxByGOCb0SRRfD73muHIScP0lK7fVlMk7g2-B1tOqxHt60oDKPkfgbe42QogLNVDnAmjo1nGrtHGzUEhB9TPDl0pw_CSCpmcQkERp8GhT_kUf3Xb1CQLliMvvc_BStebrt_w",
         "scope" : "GOOGLE",
         "types" : [ "restaurant", "food", "point_of_interest", "establishment" ],
         "vicinity" : "Strada Alexandru Vaida Voevod 55, Cluj-Napoca"
      },
      {
         "geometry" : {
            "location" : {
               "lat" : 46.7731014,
               "lng" : 23.627801
            }
         },
         "icon" : "https://maps.gstatic.com/mapfiles/place_api/icons/restaurant-71.png",
         "id" : "32a93ffe70bbdd2c8485e346837ad61384e67bf1",
         "name" : "Hanul Dacilor",
         "opening_hours" : {
            "open_now" : false,
            "weekday_text" : []
         },
         "photos" : [
            {
               "height" : 2988,
               "html_attributions" : [
                  "\u003ca href=\"https://maps.google.com/maps/contrib/102010465058487677046/photos\"\u003eחוסין מוחמד\u003c/a\u003e"
               ],
               "photo_reference" : "CoQBdwAAALGMxPZEorGPgWzFhEX8GQ6KWqvl1Gs5s4w8n0-_wyFWNQ2AaxbUXjIZK_EXnEbI6UCM4YhVyjdObdpVyEtJ6oMJ1MG_GtW_BJi2Mc-75PPBX500rAbAy_jz-8L9NL4pdC1wHF6cwWj08xx2zBHammjvvB-DD_yeSjP5qt-GV09PEhDhOXdgy57rEKjg0N5pZ01CGhTeRa3PSqE-RkpI5vGjdDObho2AwQ",
               "width" : 5312
            }
         ],
         "place_id" : "ChIJmRm5HmsMSUcRLIcHKiIRKmY",
         "rating" : 4.4,
         "reference" : "CmRRAAAA1mC_ed2g3YhFhzsrY8fXgE4Xida9jQ9BxpIk6raJpNmFUEJn00JciB3PRisZfOCpB3034vayac5_dqY8Bp_eQnS1HBSC0IdQp_Hu4Dcb_krbWQs6Sl7bTVSD5Rsu9LqmEhCDZdOMO2YJCNCh7n3-t0qbGhTI9ibzMsLx0OQUQ_oihQkUdr_Yhg",
         "scope" : "GOOGLE",
         "types" : [ "restaurant", "food", "point_of_interest", "establishment" ],
         "vicinity" : "Iulius Mall, Strada Alexandru Vaida Voevod 53-55, Cluj-Napoca"
      },
      {
         "geometry" : {
            "location" : {
               "lat" : 46.771945,
               "lng" : 23.626012
            }
         },
         "icon" : "https://maps.gstatic.com/mapfiles/place_api/icons/restaurant-71.png",
         "id" : "8d7bb32fd50d968c79c2e5048c12b95cec8cbb7d",
         "name" : "Marty City",
         "opening_hours" : {
            "open_now" : false,
            "weekday_text" : []
         },
         "photos" : [
            {
               "height" : 1125,
               "html_attributions" : [
                  "\u003ca href=\"https://maps.google.com/maps/contrib/114164649734885665448/photos\"\u003eMarty City\u003c/a\u003e"
               ],
               "photo_reference" : "CoQBcwAAAAfjwkLAWX73DgVUjKgP2uS39gFUilk6CrHCfdy-V4d1ZJrdZKzHOeqNqU0f5gHy9-MWeNGsY_2q7cJpi_b9_5oYneyQWs4U-zN6l5DxpeMdtrnNuNwd31b3BA_IEy7q_JZ8IlMScrqRspSBmq6tfFaTdnNZUwr0acvEOCVnwp2MEhCw0oErjn23GJoa5knp4gZuGhQ5ztJ1RbSe1zJbhCzAqJvAm-fN-Q",
               "width" : 1500
            }
         ],
         "place_id" : "ChIJU22Cv2oMSUcR-rhmfyKJixA",
         "rating" : 3.8,
         "reference" : "CmRRAAAAHjaKSuIN_npID0s-cC2oJAJxwLZv-sOz0J9OW8AdiRzoqlQE1MMKH3aWDwKLB9P18uGxzgefxBnkc1_E4s-4gpJsTdmoATlxSoxsuQPGl4W0pXVHBZzpnvPHCSK5GyHEEhDarUaahHk1WNi7jzExovQ3GhS-KvRprEN1uPj-cw6PJcIqiDhl8A",
         "scope" : "GOOGLE",
         "types" : [ "restaurant", "food", "point_of_interest", "establishment" ],
         "vicinity" : "str. Alexandru Vaida Voievod 53, Cluj-Napoca"
      },




1 个答案:

答案 0 :(得分:0)

您的代码看起来是正确的。也许你应该在访问之前尝试测试photos数组的存在:

locations.forEach(function(loc) {
    var photoRef;
    if (loc.photos && Array.isArray(loc.photos)) {
        photoRef = loc.photos[0].photo_reference;
    }
    else {
        photoRef = "No photo in data!";
    }

    console.log('Photo ref == ' + photoRef);
});