如何将JSONPath获取到JSON对象数组中的所有子节点?

Okk*_*kky 4 javascript jquery jsonpath

您如何获得对象的所有子节点的JSONPath?

例如:

var data = [{
    "key1": {
        "children": [{
            "key2": "value",
            "key3": "value",
            "key4": {}
        }, {
            "key2": "value",
            "key3": "value",
            "key4": {}
        }],
        "key5": "value"
    }
}, {
    "key1": {
        "children": {
            "key2": "value",
            "key3": "value",
            "key4": {}
        },
        "key5": "value"
    }
}]
Run Code Online (Sandbox Code Playgroud)

我希望将数据结构中所有节点的绝对路径作为数组:

[
    "data[0]['key1']['children'][0]['key2']", 
    "data[0]['key1']['children'][0]['key3']", 
    "data[0]['key1']['children'][0]['key4']", 
    ......, 
    "data[0]['key1']['children'][1]['key2']",
    ......., 
    "data[1]['key1']['children']['key2']",
    ..........
]
Run Code Online (Sandbox Code Playgroud)

有没有办法在JS中完成这项工作?

Okk*_*kky 5

我编写了一个自定义代码,它将所有节点的JSON路径作为数组

function toArray(obj, name) {
    var result = [];
    var passName;
    var tempArray = [];
    for (var prop in obj) {
        var value = obj[prop];
        if (typeof value === 'object') {
            if ($.isNumeric(prop)) {
                passName = name + "[" + prop + "]";
            } else {
                passName = name + "['" + prop + "']";
            }
            tempArray = toArray(value, passName);
            $.each(tempArray, function (key, value) {
                result.push(value);
            });

        } else {
            result.push(name + "['" + prop + "']");
        }
    }
    return result;
}
Run Code Online (Sandbox Code Playgroud)

JS小提琴