Javascript 通过JSON对象的路径从该对象获取值
我从一个在线API得到一个大的嵌套JSON响应。我只需要其中的3个值,但它们是嵌套的。我确实知道每个字段的确切路径。例如,假设:Javascript 通过JSON对象的路径从该对象获取值,javascript,json,Javascript,Json,我从一个在线API得到一个大的嵌套JSON响应。我只需要其中的3个值,但它们是嵌套的。我确实知道每个字段的确切路径。例如,假设: obj = { "result": { "data": { "point1": "x", "value": 2 }, "foo": { "bar": 7 } } } 路径let p='result.data.valu
obj = {
"result": {
"data": {
"point1": "x",
"value": 2
},
"foo": {
"bar": 7
}
}
}
路径let p='result.data.value'
我希望能够执行let x=getElement(obj,p)代码>并使x为2
我编写了一个简单的函数(删除了所有错误检查以保持干净):
这是可行的,但我觉得我遗漏了什么,或者效率不高。是否有更好的方法到达元素(可能使用Array.reduce
)?您可以使用拆分的路径值来减少对象
var object={result:{data:{point1:“x”,值:2},foo:{bar:7}},
路径='result.data.value',
getValue=(o,p)=>p.split('.')。reduce((r,k)=>r[k],o);
log(getValue(对象,路径))代码>可以使用拆分的路径值减少对象
var object={result:{data:{point1:“x”,值:2},foo:{bar:7}},
路径='result.data.value',
getValue=(o,p)=>p.split('.')。reduce((r,k)=>r[k],o);
log(getValue(对象,路径))代码>如果导入库是一个选项,我建议选择N:。它适用于您的情况,但也可以处理空检查、数组索引等。或者感谢@meagar,我尝试搜索类似的问题,但我想我做得不够好。无论如何,我使用reduce
得到了答案,这是一个加号:)如果导入库是一个选项,我建议选择n:。它适用于您的情况,但也可以处理空检查、数组索引等。或者感谢@meagar,我尝试搜索类似的问题,但我想我做得不够好。无论如何,我用reduce
得到了答案,所以这是一个加号:)
const getJSONElement = (data, path) => {
for(let p of path.split('.')) {
data = data[p];
}
return data;
};