Javascript 通过JSON对象的路径从该对象获取值

Javascript 通过JSON对象的路径从该对象获取值,javascript,json,Javascript,Json,我从一个在线API得到一个大的嵌套JSON响应。我只需要其中的3个值,但它们是嵌套的。我确实知道每个字段的确切路径。例如,假设: obj = { "result": { "data": { "point1": "x", "value": 2 }, "foo": { "bar": 7 } } } 路径let p='result.data.valu

我从一个在线API得到一个大的嵌套JSON响应。我只需要其中的3个值,但它们是嵌套的。我确实知道每个字段的确切路径。例如,假设:

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