Javascript json 返回未定义
Javascript json returning undefined
所以我试图通过 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
。
所以我试图通过 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
。