2016-09-15 53 views
-2

我正在使用jQuery getJSON()爲Vimeo API發出ajax請求以返回JSON。該JSON看起來像這樣(簡化):檢索JSON並提取特定值

{ 
"total": 3, 
"page": 1, 
"per_page": 25, 
"paging": { 
    "next": null, 
    "previous": null, 
    "first": "/videos/169123103/pictures?access_token=XXXXX&page=1", 
    "last": "/videos/169123103/pictures?access_token=XXXXX&page=1" 
}, 
"data": [ 
    { 
     "uri": "/videos/169123103/pictures/YYYYY", 
     "active": true, 
     "type": "custom", 
     "sizes": [ 
      { 
       "width": 100, 
       "height": 75, 
       "link": "https://i.vimeocdn.com/video/YYYYY_100x75.webp?r=pad", 
       "link_with_play_button": "https://i.vimeocdn.com/filter/overlay?src=https://i.vimeocdn.com/video/YYYYY_100x75.webp&src=http://f.vimeocdn.com/p/images/crawler_play.png" 
      }, 
      { 
       "width": 200, 
       "height": 150, 
       "link": "https://i.vimeocdn.com/video/YYYYY_200x150.webp?r=pad", 
       "link_with_play_button": "https://i.vimeocdn.com/filter/overlay?src=https://i.vimeocdn.com/video/YYYYY_200x150.webp&src=http://f.vimeocdn.com/p/images/crawler_play.png" 
      }, 
      { 
       "width": 295, 
       "height": 166, 
       "link": "https://i.vimeocdn.com/video/YYYYY_295x166.webp?r=pad", 
       "link_with_play_button": "https://i.vimeocdn.com/filter/overlay?src=https://i.vimeocdn.com/video/YYYYY_295x166.webp&src=http://f.vimeocdn.com/p/images/crawler_play.png" 
      } 
     ], 
     "resource_key": "ZZZZZ" 
    } 
] 
} 

我想拿出一個具體的值:"link":"sizes":的第一部分。這裏是我的Javascript:

jQuery.getJSON('https://api.vimeo.com/videos/AAAAA/pictures?access_token=BBBBB', function(result){ 
    var obj = jQuery.parseJSON(result); 
    jQuery('#pic_url').html(obj.data.sizes[0].link); 
}); 

這似乎讓我無處可去。我想我正確地請求了JSON,但是我通過它解析的方式有些問題。我怎樣才能達到這個價值......或者任何具體的價值呢?

+3

君不見了'['數據後': '?這意味着它是一個數組,因此您需要將它編入索引。[ – Barmar

+1

您明顯瞭解這一點,因爲您已爲'sizes:'正確執行了此操作。是什麼讓你認爲'數據:'有什麼不同? – Barmar

+1

您認爲您可以忽略數組,因爲它只有一個對象嗎?你不能。 – Barmar

回答

0

錯過它作爲評論提到Barmar,你"data":是一個數組。您需要訪問數組的索引0

jQuery('#pic_url').html(obj.data[0].sizes[0].link); 

然而,即使更改了該行的代碼訪問data[0],您的代碼將仍然無法正常工作。你從jQuery.getJSON()得到的是JSON代表的JavaScript對象,而不是JSON文本(即它已經運行通過JSON.parse())。因此,你需要以不運行result通過JSON.parse()自己:用模擬jQuery.getJSON()

jQuery('#pic_url').html(result.data[0].sizes[0].link); 

代碼:

//Override the jQuery.getJSON method to simulate it in this snippet  
 
jQuery.getJSON = simulateJQueryGetJSON; 
 

 
jQuery.getJSON('https://api.vimeo.com/videos/AAAAA/pictures?access_token=BBBBB', function(result){ 
 
    jQuery('#pic_url').html(result.data[0].sizes[0].link); 
 
}); 
 

 
//jQuery.getJSON is simulated here for demonstrating functionality in this snippet. 
 
function simulateJQueryGetJSON(url,callback){ 
 
    var textJSON = `{ 
 
     "total": 3, 
 
     "page": 1, 
 
     "per_page": 25, 
 
     "paging": { 
 
      "next": null, 
 
      "previous": null, 
 
      "first": "/videos/169123103/pictures?access_token=XXXXX&page=1", 
 
      "last": "/videos/169123103/pictures?access_token=XXXXX&page=1" 
 
     }, 
 
     "data": [ 
 
      { 
 
       "uri": "/videos/169123103/pictures/YYYYY", 
 
       "active": true, 
 
       "type": "custom", 
 
       "sizes": [ 
 
        { 
 
         "width": 100, 
 
         "height": 75, 
 
         "link": "https://i.vimeocdn.com/video/YYYYY_100x75.webp?r=pad", 
 
         "link_with_play_button": "https://i.vimeocdn.com/filter/overlay?src=https://i.vimeocdn.com/video/YYYYY_100x75.webp&src=http://f.vimeocdn.com/p/images/crawler_play.png" 
 
        }, 
 
        { 
 
         "width": 200, 
 
         "height": 150, 
 
         "link": "https://i.vimeocdn.com/video/YYYYY_200x150.webp?r=pad", 
 
         "link_with_play_button": "https://i.vimeocdn.com/filter/overlay?src=https://i.vimeocdn.com/video/YYYYY_200x150.webp&src=http://f.vimeocdn.com/p/images/crawler_play.png" 
 
        }, 
 
        { 
 
         "width": 295, 
 
         "height": 166, 
 
         "link": "https://i.vimeocdn.com/video/YYYYY_295x166.webp?r=pad", 
 
         "link_with_play_button": "https://i.vimeocdn.com/filter/overlay?src=https://i.vimeocdn.com/video/YYYYY_295x166.webp&src=http://f.vimeocdn.com/p/images/crawler_play.png" 
 
        } 
 
       ], 
 
       "resource_key": "ZZZZZ" 
 
      } 
 
     ] 
 
    }`; 
 

 
    callback(JSON.parse(textJSON)); 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
The "link:" you are looking for is:<br/> 
 
<div id="pic_url"></div>

+2

儘管沒有必要解釋爲什麼你拒絕投票,留下評論是有幫助的,以便解決任何問題。我和大多數人一樣,盡力提供準確和實用的答案。如果你真的覺得答案「沒有用」,留下評論,指出你爲什麼這樣認爲會導致答案的改善。 – Makyen

-1

「數據」是一個數組,所以在這種情況下obj.data.sizes[0].link應該obj.data[0].sizes[0].link