2015-07-21 107 views
0

閱讀了不同的方法後,請耐心等待我解釋一下。JSON循環多維數組與node.js

我想從twitch api中檢索數據,並將user.name結果循環到可能位於對象內部的數組中。我使用nodejs,所以它必須是JavaScript。

到目前爲止,當我運行以下我得到一個不錯的JSON響應。

var request = require('request'); 

    request({url: 'https://api.twitch.tv/kraken/channels/twitch/follows?limit=3'}, function(err, res, json) { 
     if (err) { 
      throw err; 
     } 

     console.log(json); 

    }); 

這則日誌一樣,如果一個地方參觀https://api.twitch.tv/kraken/channels/twitch/follows?limit=3

或更好的可視化作爲

json structure

現在我想選擇如下 - >用戶 - >名對象。更重要的是,在響應中循環每個用戶 - >名稱。

我以爲我會需要將字符串轉換爲對象,所以我嘗試

var obj = JSON.parse(json); 

但只返回樹中的第{3}的對象。所以,我繼續嘗試

var request = require('request'); 

    request({url: 'https://api.twitch.tv/kraken/channels/twitch/follows?limit=3'}, function(err, res, json) { 
     if (err) { 
      throw err; 
     } 

     for (var i=0; i<json.length; i++) { 

     var obj = JSON.parse(json.follows[i].user.name); 
     console.log(obj); 

     } 

    }); 

,並返回

TypeError: Cannot read property '0' of undefined 

出於測試目的,我也擺脫了循環的,只是有1返回信息的一個位。在嘗試多次重新安排呼叫的情況下,我總是得到一個錯誤或「undefined」。

似乎沒有什麼工作,我甚至會以這種正確的方式去做?

回答

1

爲JSON是一個對象在這裏,我們應該使用,在雖然沒有長屬性。但是這裏json.follows是一個數組。所以我們應該使用for循環。

var len = json.follows.length; 
for (var i=0; i< len; i++) { 
    console.log(json.follows[i].user.name); 
} 
+0

'following'是一個數組 - 對數組使用常規的'for'循環。 – tymeJV

+0

是的...對於以下我們可以使用常規循環。但是對於我們應該用於...的對象json。我會更新我的答案。 – jrath

+0

我得到TypeError:無法讀取未定義的屬性「長度」,與上述答案相同。不知道這是怎麼發生的? – ServerSideSkittles

3

遍歷json.followers.length - 不json.length - json是一個對象,對象不具有的長度:

for (var i=0; i<json.follows.length; i++) { 
+0

那麼簡單但非常有效。 – Lansana

+0

我似乎得到TypeError:嘗試此操作時無法讀取未定義的屬性「長度」。 – ServerSideSkittles

+0

full edit:for(var i = 0; i ServerSideSkittles

0

假如你做var obj = JSON.parse(json);

for (var j = 0; j < obj.follows.length; j++) { 
    var thisName = jsonObj.follows[j].user.name; 
    console.log(thisName); 
}