Javascript JS:如果沿嵌套字典路径为null,则返回默认值
我有一个高度嵌套的JSON结构,在这里我可以像这样提取单个信息Javascript JS:如果沿嵌套字典路径为null,则返回默认值,javascript,Javascript,我有一个高度嵌套的JSON结构,在这里我可以像这样提取单个信息 let result = data["a"]["b"][0]["c"]["d"][0]["e"][0] 提取数据的优雅方式是什么?此外,当a、b、c、d、e中的任何一个都不存在或数组不包含元素0时,是否可以将结果分配给null或undefined let result=data?.a?.b?[0]?.c?.d?[0]?.e?[0]
let result = data["a"]["b"][0]["c"]["d"][0]["e"][0]
提取数据的优雅方式是什么?此外,当a、b、c、d、e中的任何一个都不存在或数组不包含元素0时,是否可以将结果分配给
null
或undefined
let result=data?.a?.b?[0]?.c?.d?[0]?.e?[0]
我想说最简单的选择是一个可选的链式操作符或其他东西,但我相信正确的方法是这样的
可能还有其他库(如one或)允许您执行相同的操作
JSONPath是JSON的XPath
JSON示例:
{ "store": {
"book": [
{ "category": "reference",
"author": "Nigel Rees",
"title": "Sayings of the Century",
"price": 8.95
},
{ "category": "fiction",
"author": "Evelyn Waugh",
"title": "Sword of Honour",
"price": 12.99
}
],
"bicycle": {
"color": "red",
"price": 19.95
}
}
}
这就是如何使用JSONPath表达式获取商店中所有书籍的作者:
$.store.book[*].author
您可以在JavaScript中使用它:
const o = { /*...*/ }, // the 'store' JSON object from above
res1 = jsonPath(o, "$..author").toJSONString(); // all authors JSONPath expression
res2 = jsonPath(o, "$..author", {resultType:"PATH"}).toJSONString();
您可以编写一个函数
path
,用于获取要访问的属性数组和要读取的对象:
- 该函数是curry函数,因此您可以构建一个访问特定路径的函数,并将其与不同的对象重用
- reduce向下钻取对象,直到
或到达路径末端未定义
constpath=p=>o=>
p、 减少((分辨率,pp)=>
res==未定义?res:res[pp]
,o
);
const abcd=path(['a','b','c','d']);
log(abcd({}));
log(abcd({a:1}));
log(abcd({a:{b:{}));
log(abcd({a:{b:{c:{d:42}))
我最喜欢的解决方案是使用链接问题中的\u try
函数进行如此长的导航,直到可选的链接操作符在所有应用程序中都得到支持targets@CristianTraìna这不再是必要的,因为它现在在ECMA标准中,并且通过Transfilation(使用webpack)支持对于较旧的目标或直接在JS引擎中(节点和浏览器)。@zmo我同意,但不是每个人都在使用Babel:)有些人仍然为浏览器编写JavaScript。顺便说一句,链接问题还包含可选链接运算符的引用。我并不反对将问题作为重复问题结束,我实际上只是添加了我的投票。虽然我认为可选链接应该优先于\u try
功能,因为现在主要浏览器都支持它,但它是标准的,为了向后兼容,有babel。