我试图在某些情况下json [0] ['检查json [0] ['DATA'] ['name'] [0] ['DATA'] ['first_0']是否存在DATA'] ['name']不包含任何内容。
我可以使用
检查json [0] ['DATA'] ['name']if (json[0]['DATA']['name'] == '') {
// DOES NOT EXIST
}
然而
if (json[0]['DATA']['name'][0]['DATA']['first_0'] == '' || json[0]['DATA']['name'][0]['DATA']['first_0'] == 'undefined') {
// DOES NOT EXIST
}
返回json [0] ['DATA'] ['name'] [0] ['DATA']为空或不是对象。我理解这是因为数组'name'在这种情况下不包含任何内容,但在其他情况下first_0确实存在并且json [0] ['DATA'] ['name']确实返回一个值。
有没有办法可以直接查看json [0] ['DATA'] ['name'] [0] ['DATA'] ['first_0']而无需执行以下操作?
if (json[0]['DATA']['name'] == '') {
if (json[0]['DATA']['name'][0]['DATA']['first_0'] != 'undefined') {
// OBJECT EXISTS
}
}
答案 0 :(得分:4)
要检查属性是否设置,您可以说
if (json[0]['DATA']['name']) {
...
}
除非该对象显式地包含0
(零)或''
(空字符串),因为它们也评估为false
。在这种情况下,您需要明确检查undefined
if (typeof(json[0]['DATA']['name']) !== "undefined") {
...
}
如果你有几个这样的对象属性链引用了一个实用函数,例如:
function readProperty(json, properties) {
// Breaks if properties isn't an array of at least 1 item
if (properties.length == 1)
return json[properties[0]];
else {
var property = properties.shift();
if (typeof(json[property]) !== "undefined")
return readProperty(json[property], properties);
else
return; // returns undefined
}
}
var myValue = readProperty(json, [0, 'DATA', 'name', 0, 'DATA', 'first_0']);
if (typeof(myValue) !== 'undefined') {
// Do something with myValue
}
答案 1 :(得分:1)
所以你问你是否必须检查一个孩子是否存在父母可能不存在的地方?不,我不相信你能做到。
编辑:只是因为这不是一个完全的损失,所有括号是什么?
json[0]['DATA']['name'][0]['DATA']['first_0']
可能是
json[0].DATA.name[0].DATA.first_0
正确?