इस तरह मैं इस किया है के लिए काम करता है।
/**
* Converts a string path to a value that is existing in a json object.
*
* @param {Object} jsonData Json data to use for searching the value.
* @param {Object} path the path to use to find the value.
* @returns {valueOfThePath|undefined}
*/
function jsonPathToValue(jsonData, path) {
if (!(jsonData instanceof Object) || typeof (path) === "undefined") {
throw "Not valid argument:jsonData:" + jsonData + ", path:" + path;
}
path = path.replace(/\[(\w+)\]/g, '.$1'); // convert indexes to properties
path = path.replace(/^\./, ''); // strip a leading dot
var pathArray = path.split('.');
for (var i = 0, n = pathArray.length; i < n; ++i) {
var key = pathArray[i];
if (key in jsonData) {
if (jsonData[key] !== null) {
jsonData = jsonData[key];
} else {
return null;
}
} else {
return key;
}
}
return jsonData;
}
परीक्षण के लिए
,
var obj = {d1:{d2:"a",d3:{d4:"b",d5:{d6:"c"}}}};
jsonPathToValue(obj, "d1.d2"); // a
jsonPathToValue(obj, "d1.d3"); // {d4: "b", d5: Object}
jsonPathToValue(obj, "d1.d3.d4"); // b
jsonPathToValue(obj, "d1.d3.d5"); // {d6: "c"}
jsonPathToValue(obj, "d1.d3.d5.d6"); // c
आशा किसी को मदद मिलेगी।
स्रोत
2016-01-14 19:20:57
यदि आपकी खोज चर एक स्ट्रिंग ऑब्जेक्ट को इंगित करती है (उदाहरण के लिए) तो आप उस पथ के लिए विश्वसनीय रूप से खोज नहीं पाएंगे (उदाहरण के लिए) 'data.key1.children.key3 === data.key4' यह भी सच होगा, और शायद वह नहीं जो आप प्राप्त करने की कोशिश कर रहे हैं। – Yoshi
धन्यवाद योशी, मैंने कोड नमूना अपडेट किया है। अब संदर्भ किसी अन्य वस्तु को इंगित कर रहा है। – user1138959