2010-05-04 2 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 '] является нулевым или не является объектом. Я понимаю, что это потому, что имя массива в этом случае не содержит ничего, но в других случаях 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

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 
} 
Смежные вопросы