I want to access a nested JSON dictionary via dynamically constructed keypath.
The keypath uses standard JSON dot and subscript operators. (. and [x])
E.g.:
var data =
{"title": "a_title",
"testList": [
{
"testListItemKey": "listitem1"
},
{
"testListItemKey": "listitem2",
"deepTestList": [
{
"testListItemKey": "listitem1",
"testListItemDict":{
"subTitle": "sub_title",
}
}]
}]
}
An example keypath string would be:
data.feedEntries[0].testList[2].deepTestList[1].testListItemDict.subTitle
The simplest working solution I found so far is to use eval or function constructors:
function valueForKeypPath(data, keyPath) {
"use strict";
var evaluateKeypath = new Function('data', 'return data.' + keyPath);
return evaluateKeypath(data);
}
As I can't fully trust the JSON data I receive from a remote endpoint, I'd like to avoid eval et.al.
Replace all "[" to "." and "]" to "" so you get to
feedEntries.0.testList.2.deepTestList.1.testListItemDict.subTitle
Split this into a path array like using path.split('.')
var paths = ['feedEntries','0','testList','2']
then just
var root = data;
paths.forEach(function(path) {
root = root[path];
});
at the end root contains the desired data fragment.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With