Я использую JSON Parser на основе http://techslides.com/how-to-parse-and-search-json-in-javascript/, чтобы разобрать дерево, находящее пару ключ/значение, в примере, которое показывает, что он может извлекать ключи или значения на основе любого заданного ввода.JSON Parsing сообщает пустой массив
В моем случае, независимо от того, что я дал ему в качестве ввода, он возвращает только пустой массив.
JSON
{
"DATA_HEADER": {
"0": "Division",
"1": "District",
"2": "Area",
"3": "Project",
"4": "Object Type Prefix",
"5": "Object Type",
"6": "Category"
},
"DATA_SOURCE_DEPENDENT":{
"Division1" : {
"checked": true,
"level": 1,
"District1-1": {
"checked": true,
"level": 2,
"Area1-1-1": {
"checked": true,
"level": 3,
"Project1-1-1-1": {
"checked": true,
"level": 4
}
},
"Area1-1-2": {
"checked": true,
"level": 3,
"Project1-1-2-1": {
"checked": true,
"level": 4,
"05": {
"checked": true,
"level": 5
}
}
}
}
},
"Division2" : {
"checked": true,
"level": 1,
"District2-1": {
"checked": true,
"level": 2,
"Area2-1-1": {
"checked": true,
"level": 3,
"Project2-1-1-1": {
"checked": true,
"level": 4
}
},
"Area2-1-2": {
"checked": true,
"level": 3,
"Project2-1-2-1": {
"checked": true,
"level": 4,
"05": {
"checked": true,
"level": 5,
"Frag": {
"checked": true,
"level": 6
}
},
"Excavator": {
"checked": true,
"level": 7
}
}
}
}
},
"Division3" : {
"checked": true,
"level": 1
},
"Division4" : {
"checked": true,
"level": 1
},
"Division5" : {
"checked": true,
"level": 1
},
"Division6" : {
"checked": true,
"level": 1
},
"Division7" : {
"checked": true,
"level": 1
},
"Division8" : {
"checked": true,
"level": 1
}
}
}
Я использовал код, основанный на вышеуказанном URL.
JS
//return an array of objects according to key, value, or key and value matching
function getObjects(obj, key, val) {
var objects = [];
for (var i in obj) {
if (!obj.hasOwnProperty(i)) continue;
if (typeof obj[i] == 'object') {
objects = objects.concat(getObjects(obj[i], key, val));
} else
//if key matches and value matches or if key matches and value is not passed (eliminating the case where key matches but passed value does not)
if (i == key && obj[i] == val || i == key && val == '') { //
objects.push(obj);
} else if (obj[i] == val && key == ''){
//only add if the object is not already in the array
if (objects.lastIndexOf(obj) == -1){
objects.push(obj);
}
}
}
return objects;
}
//return an array of values that match on a certain key
function getValues(obj, key) {
var objects = [];
for (var i in obj) {
if (!obj.hasOwnProperty(i)) continue;
if (typeof obj[i] == 'object') {
objects = objects.concat(getValues(obj[i], key));
} else if (i == key) {
objects.push(obj[i]);
}
}
return objects;
}
//return an array of keys that match on a certain value
function getKeys(obj, val) {
var objects = [];
for (var i in obj) {
if (!obj.hasOwnProperty(i)) continue;
if (typeof obj[i] == 'object') {
objects = objects.concat(getKeys(obj[i], val));
} else if (obj[i] == val) {
objects.push(i);
}
}
return objects;
}
var json = '{"DATA_HEADER":{"0":"Division","1":"District","2":"Area","3":"Project","4":"Object Type Prefix","5":"Object Type","6":"Category"},"DATA_SOURCE_DEPENDENT":{"Division1":{"checked":true,"level":1,"District1-1":{"checked":true,"level":2,"Area1-1-1":{"checked":true,"level":3,"Project1-1-1-1":{"checked":true,"level":4}},"Area1-1-2":{"checked":true,"level":3,"Project1-1-2-1":{"checked":true,"level":4,"05":{"checked":true,"level":5}}}}},"Division2":{"checked":true,"level":1,"District2-1":{"checked":true,"level":2,"Area2-1-1":{"checked":true,"level":3,"Project2-1-1-1":{"checked":true,"level":4}},"Area2-1-2":{"checked":true,"level":3,"Project2-1-2-1":{"checked":true,"level":4,"05":{"checked":true,"level":5,"Frag":{"checked":true,"level":6}},"Excavator":{"checked":true,"level":7}}}}},"Division3":{"checked":true,"level":1},"Division4":{"checked":true,"level":1},"Division5":{"checked":true,"level":1},"Division6":{"checked":true,"level":1},"Division7":{"checked":true,"level":1},"Division8":{"checked":true,"level":1}}}';
var js = JSON.parse(json);
//example of grabbing objects that match some key and value in JSON
console.log(getObjects(js.DATA_SOURCE_DEPENDENT,'checked','true'));
//example of grabbing objects that match some key in JSON
console.log(getObjects(js.DATA_SOURCE_DEPENDENT,'District1-1',''));
//example of grabbing obejcts that match some value in JSON
console.log(getObjects(js.DATA_SOURCE_DEPENDENT,'','Project2-1-1-1'));
//example of grabbing values from any key passed in JSON
console.log(getValues(js.DATA_SOURCE_DEPENDENT,'District1-1'));
//example of grabbing keys by searching via values in JSON
console.log(getKeys(js.DATA_SOURCE_DEPENDENT,'Project2-1-1-1'));
Я приложил plnkr, основанную на выше http://plnkr.co/edit/xjKMn5eOghoJPguXalnc?p=preview
Не могли бы вы объяснить это в приведенной ссылке plnkr. – cs1193
Строка 9 - Удалите 'else' Строка 57 - удалите цитаты вокруг 'true' – Jason