首页 > 解决方案 > JS:如果沿嵌套字典路径为空,则返回默认值

问题描述

我有一个高度嵌套的 JSON 结构,我可以在其中提取出这样的个人信息

let result = data["a"]["b"][0]["c"]["d"][0]["e"][0]

什么是提取数据的优雅方法?此外,是否可以将结果分配给nullundefined当任何 a、b、c、d、e 不存在或数组不包含元素 0 时?

标签: javascript

解决方案


我想说最简单的选择是可选的链接运算符或其他东西,但我相信正确的方法是JSONPath

可能还有其他库(例如jsonpath one 或jsonpath-plus)允许您执行相同的操作。

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();

推荐阅读