Javascript json返回未定义

Javascript json returning undefined

本文关键字:未定义 返回 json Javascript      更新时间:2023-09-26

所以我试图通过for in循环从json对象中获取一些数据,但它一直返回未定义的数据。这是我的代码:

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)

它会打印出我想要的东西。有什么建议吗?

将行更改为

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

当你说时

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

key在对象json.data的属性名称中迭代并且因此是字符串。因此,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