2015-04-01 190 views
0

所以我試圖從一個json對象中通過一個for循環獲取一些數據,並且它一直返回undefined。這裏是我的代碼:Javascript json返回undefined

router.get('/', function(req, res, next) { 
    request('https://api.instagram.com/v1/media/popular?client_id=############', function (error, response, body) { 
    json = JSON.parse(body); 
    var popular_tags = []; 

    for (var key in json['data']){ 
     tag = JSON.stringify(key['tags']) 
     popular_tags.push(tag) 
    } 
    console.log(popular_tags) 

    res.render('index', {title: body }); 
    }); 
}); 

這是輸出我收到:

[ undefined, 
    undefined, 
    undefined, 
    undefined, 
    undefined, 
    undefined, 
    undefined, 
    undefined, 
    undefined, 
    undefined, 
    undefined, 
    undefined, 
    undefined, 
    undefined, 
    undefined, 
    undefined, 
    undefined, 
    undefined, 
    undefined, 
    undefined ] 

然而,當我嘗試

var popular_tags = []; 
popular_tags.push(json['data'][0]['tags']) 
console.log(popular_tags) 

它會打印出我想要的東西。有什麼建議麼?當你說

for (var key in json['data']) 

key通過對象json.data的屬性名稱的迭代

回答

1

行更改爲

tag = JSON.stringify(json['data'][key]['tags']) 
+0

感謝您的幫助! – 2015-04-01 00:25:00

1

,因此是一個。因此,key['tags']undefined,因爲字符串通常不具有屬性tags。事情從那裏滾雪球。

一般的成語是:

for (var key in json.data) { 
    if (json.data.hasOwnProperty(key) { 
    var item = json.data[key]; 
    // ... 
    } 
} 

hasOwnProperty的事情是針對有人在任何的你迭代原型注入一些保護。例如,如果某人做了一件愚蠢的事情,如Object.prototype.breakAllCode = true,則"breakAllCode"會顯示爲key,無論您正在迭代什麼。