How would you get a JSONPath to all child nodes in an array of JSON object?

不问归期 提交于 2020-01-13 04:16:29

问题


How would you get a JSONPath to all child node of an object?

E.g.:

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

I want to get absolute path for all nodes in the data structure as an array:

[
    "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']",
    ..........
]

Is there any way to get this done in JS?


回答1:


I wrote a custom code that gives us JSON path of all nodes as array

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;
}

JS Fiddle




回答2:


well , I think you have to loop through your entire json structure..

  for(var i=0; i<data.length; i++) {
     for(var j in data[i]){
       //and so on
      }
   }

Or simply you can create aleas arrary for every key where key will be the path of that value with "_" as separator like..

 var aleasArray = []; 
 for(var i=0; i<data.length; i++) {
     for(var j in data[i]){
      aleasArray[i + '_' + j] = data[i][j];  // if you want make it more generalize aleas array..
      }
   }

hope this will help you..



来源:https://stackoverflow.com/questions/18629366/how-would-you-get-a-jsonpath-to-all-child-nodes-in-an-array-of-json-object

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!