Проверьте структуру данных JSON на наличие имен нижнего уровня - PullRequest
1 голос
/ 25 апреля 2011

Можно ли использовать 'in' для проверки существования имен не верхнего уровня в структуре данных JSON за одно сравнение?

У меня есть n-уровневые структуры данных JSON,

Я могу сделать: если ("mbled" в jsonData), отлично работает

Для названия нижнего уровня:

Я могу сделать это, но (работает, но становится неуклюже, когда я углубляюсь): if ("pnpenvsense1" в jsonData && "light" в jsonData.pnpenvsense1)

Я бы предпочел что-то вроде (не работает, всегда возвращает false): if ("pnpenvsense1.light" в jsonData)

Ответы [ 2 ]

1 голос
/ 25 апреля 2011

что-то вроде:

function objExists(path, struct){
    path = path.split('.');
    for(var i=0, l=path.length; i<l; i++){
        if(!struct.hasOwnProperty(path[i])){ return false; }
        struct = struct[path[i]];
    }
    return true;
}

objExists('pnpenvsense1.light', jsonData);
0 голосов
/ 25 апреля 2011

try

// проверит, определено ли оно и не ложно

if(pnpenvsense1.light !== undefined && pnpenvsense1.light != false ) 

  { // my code } 

http://jsfiddle.net/

arr = new Array();
arr['myKey'] = 12;
arr['myOtherKey'] =  { "first" : "yes" , "second" : false  };

if(arr.myKey !== undefined  && arr.myKey != false)
    alert("1 -> " + arr.myKey);

if(arr.myOtherKey.first !== undefined && arr.myOtherKey.first != false)
    alert("2 -> " + arr.myOtherKey.first);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...