2014-09-11 3 views
0

Как проверить объект JSON, входной путь присутствует или нет?Поиск пути JSON внутри объекта

var obj = { 
    "schemaOne": { 
    "name": "abc", 
    "Path": "i.abc", 
    "count": 5347, 
    "subFolders": [ 

    ] 
    }, 
    "schemaTwo": { 
    "name": "cde", 
    "Path": "i.cde", 
    "count": 0, 
    "subFolders": [ 
     { 
     "name": "efg", 
     "Path": "", 
     "count": 0, 
     "subFolders": [ 

     ] 
     }, 
     { 
     "name": "hij", 
     "Path": "i.hij", 
     "count": 1, 
     "subFolders": [ 

     ] 
     } 
    ] 
    } 
} 

var inputpath = "obj.count"; 

После нескольких исследований я наткнулся на код ниже. Здесь в этом коде o.Path известен пользователю. Но я хочу изменить код, чтобы динамически проверить tat obj.count присутствует в объекте JSON или нет?

function upd(o, path, count) { 
    if (o.Path == path) { 
    o.count = count; 
    } else { 
    var arr; 
    if (Array.isArray(o)) arr = o; 
    else if (o.subFolders) arr = o.subFolders; 
    else return; 
    for(var j=0; j < arr.length; j++) { 
     upd(arr[j], path, count); 
    } 
    } 
} 
+2

Где JSON? – Teemu

+0

переменная @Teemu obj содержит объект JSON – user87267867

+3

Нет, 'obj' - объект JavaScript, он не имеет ничего общего с форматами обмена данными. – Teemu

ответ

0

Ваш вопрос не очень ясен, не используется. Как сказал кто-то, obj - объект JavaScript, а не JSON.

Если я правильно понял, вы хотите проверить, существует ли в этом объекте путь, заданный как строка (например, obj.count).

очень быстро, но не безопасно решение (eval зло и его следует избегать почти в каждом случае) может быть:

if(eval(inputpath)){ 
    //... do something 
} 

В альтернативной, я предлагаю вам написать функцию, которая получает объект и строку (путь) в качестве параметра, анализирует путь строки и проверяет, содержит ли объект такой путь.

Начало здесь: Accessing nested JavaScript objects with string key

+0

Я пробовал код, но для индекса массива, который неизвестен, он бросает undefined [http://jsfiddle.net/user87267867/uLL0a9u0/] – user87267867

+0

ну, если индекс неизвестен, это не допустимый путь, и вы не можете используй это. В вашем примере попробуйте 'schemaTwo.subFolders [0] .name' вместо –

+0

Да, что будет работать – user87267867

Смежные вопросы