基于JSON值获取密钥

Get key based on JSON value

本文关键字:密钥 获取 JSON 基于      更新时间:2023-09-26

我想知道JSON对象中的递归键。例如,JSON对象类似于

{
    "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
                    }
                }
            }
        }
    }
}

并且我能够找到"Project1-1-1-1",我应该能够在数组中找到并存储的"Area1-1-1"、"District1-1"、"Division1"如何执行递归搜索来存储父/祖父密钥?

我正在使用javascript使成为可能

当前JS:

        var parent = [];
        $.test.getObjects = function(obj, key, val) {
            var objects = [];
            for (var i in obj) {
                if (!obj.hasOwnProperty(i)){  continue; }
                if (typeof obj[i] == 'object') {
                   // console.log(i);
                    parent.push(i);
                    objects = objects.concat($.test.getObjects(obj[i], key, val));
                }
                //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({"parent": parent,"children": 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({"parent": parent,"children": obj});
                    }
                }
            }
            return objects;
        };

我正在修改我以前的答案,所以我要删除它。看起来我根本不理解你的问题:)

AFAIK,Javascript数组/字典不存储父关系,所以我认为唯一可以做到这一点的方法是从父开始检查整个树。你应该递归地遵循的步骤:

1-获取子数组(使用Object.keys(var)方法)

2-如果它不是您要查找的键,请为每个子项运行递归方法。作为一个参数,您应该传递一个数组,累积以前运行中获得的所有以前的键,并添加您即将访问的子项的键。

3-如果这是你正在寻找的密钥,只需存储你一直在积累的所谓数组,就可以了!

接下来,您应该能够使用几个参数来执行一个简单的递归方法:您正在检查的数组的当前点,以及可能成为结果的所谓累积数组。

我不知道是否还有比这更简单的方法。