JScript JSON对象检查

时间:2010-05-04 15:15:08

标签: json object javascript

我试图在某些情况下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
    }
}

2 个答案:

答案 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

正确?