2016-11-13 4 views
-1

こんにちは、Googleの場所からJSONレスポンスを返すことができ、そこから写真参照要素を抽出する必要があります。google place繰り返し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

私は時々、応答には写真の物が(写真なしの場所のために存在することができます)がないと思います。コンソールに応答全体を出力し、それぞれの場所に応答が存在するかどうかを確認することで、これが正しいかどうかを調べることができます。私はここでそれを試してみました - https://repl.it/EW5r/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); 
}); 
関連する問題