Javascript JSON解析报告空数组

Javascript JSON解析报告空数组,javascript,json,Javascript,Json,我使用一个基于的JSON解析器来解析树,找到键/值对,在这个示例中,它显示它可以根据任何给定的输入检索键或值 在我的例子中,无论我给它什么作为输入,它只返回一个空数组 JSON 我使用了基于上述URL的代码 JS 我已经附加了一个基于上面的plnkr,它看起来像第一个控制台。至少,您正在测试'true'(字符串),其中您的值是true(布尔值) 我认为第二个问题是else,在你发表评论之前,删除它,你就会得到结果。你能在给出的plnkr链接中解释一下吗。第9行-删除else第57行-删除“tru

我使用一个基于的JSON解析器来解析树,找到键/值对,在这个示例中,它显示它可以根据任何给定的输入检索键或值

在我的例子中,无论我给它什么作为输入,它只返回一个空数组

JSON

我使用了基于上述URL的代码

JS


我已经附加了一个基于上面的plnkr,它看起来像第一个控制台。至少,您正在测试
'true'
(字符串),其中您的值是
true
(布尔值)


我认为第二个问题是
else
,在你发表评论之前,删除它,你就会得到结果。

你能在给出的plnkr链接中解释一下吗。第9行-删除
else
第57行-删除“true”周围的引号
{
    "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
        }
    }
  }
//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'));