JScript JSON Проверка объекта - PullRequest
0 голосов
/ 04 мая 2010

Я пытаюсь проверить, существует или нет json [0] ['DATA'] ['name'] [0] ['DATA'] ['first_0'], когда в некоторых случаях json [0] [' ДАННЫЕ '] [' 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 ]

4 голосов
/ 04 мая 2010

Чтобы проверить, установлено ли свойство, вы можете просто сказать

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 голос
/ 04 мая 2010

поэтому вы спрашиваете, нужно ли вам проверять, существует ли ребенок там, где родитель может не существовать? нет, я не верю, что ты можешь сделать это.

edit: и просто так, это не полная потеря, что со всеми скобками?

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

может быть

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

право

...