2010-05-04 72 views
0

我试图检查是否存在json [0] ['DATA'] ['name'] [0] ['DATA'] ['first_0']在某些情况下json [ 0] ['DATA'] ['name']不包含任何内容。JScript JSON对象检查

我可以检查JSON [0] [ 'DATA']使用

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'] ['名称[ '名称'] '] [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 
    } 
} 

回答

1

所以你问你是否必须检查一个孩子是否存在父母可能不存在?不,我不相信你能做到这一点。

编辑:只是所以它不是完全损失,所有的括号是什么?

json[0]['DATA']['name'][0]['DATA']['first_0'] 

很可能是

json[0].DATA.name[0].DATA.first_0 

吧?

+0

没错,这就是我问。谢谢。 – Choy 2010-05-04 15:39:06

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 
}