问题
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