У меня есть JSON, как показано ниже
var json = {
"name": "Soft Drinks",
"T2": [
{
"name": "Bottled",
"T3": [
{
"name": "Apple",
"leaf": [
{
"name": "Apple 500 ML"
},
{
"name": "Apple 1 Ltr"
}
]
}
]
},
{
"name": "Fountain",
"T3": [
{
"name": "Apple",
"leaf": [
{
"name": "Apple Regular, 500 ML"
}
]
}
]
},
{
"name": "Tin",
"T3": [
{
"name": "Apple",
"leaf": [
{
"name": "Apple Regular, 300 ML"
}
]
}
]
}
]
}
Я пытаюсь искать JSON, предоставляя путь
Дело 1 :
Например, если я предоставил путь как
var patharray = ["Soft Drinks","Bottled"] ; //(Bottled doesn't have leaf )
Мне нужен вывод: Apple
Случай 2:
Например, если я предоставил путь как
var patharray = ["Soft Drinks","Bottled","Apple"] ; //(Apple has got leaf )
Мне нужен вывод
"leaf": [
{
"name": "Apple 500 ML"
},
{
"name": "Apple 1 Ltr"
}
]
Я попробовал это, используя следующий способ, но сейчас его не работает.
function findElement(obj, patharray, index) {
var res = '';
if(index < patharray.length) {
var searchStr = patharray[index];
index++;
for(each in obj) {
if(obj[each] instanceof Array) {
var found = false;
for(var i=0;i<obj[each].length;i++) {
if(obj[each][i].name == searchStr) {
res = obj[each][i];
if(index<patharray.length) {
console.log('search again')
res = findElement(obj[each][i], patharray, index);
}
found = true
break;
}
}
if(found) {
break;
}
}
}
return res
}
}
var patharray = ["Ice creams","Stick","Frosty"] ;
console.log(findElement(json, patharray, 0));
Проверьте ответы на эту question- JSONPath или другую полезную утилиту XPath для JSON/Javascript; или JQuery JSON
Существует несколько вариантов: JSONSelect, Defiant.js, JSPath