NodeJS 我可以在单个JMESPath搜索中执行多个搜索字符串吗?

oipij1gg  于 2022-12-26  发布在  Node.js
关注(0)|答案(1)|浏览(163)

我希望能够使用JMESPath和JavaScript在JSON中执行多个搜索,这样就不必为需要执行的每个JMESPath搜索字符串迭代大对象。
我有一个示例对象(我们称之为arrayItem):

{
  "domains": ["somedomain.com", "otherdomain.com"],
  "subdomains": ["mail", "docs"]
}

我尝试使用JavaScript查询这两个字段,并将数据收集到一个新数组中,如下所示:

const result = JMESPath.search(arrayItem, ["domains[]", "subdomains[]"])

其中一个JMESPath搜索是"domains []",另一个是"subdomains []"。
但这不起作用,我得到了null作为结果,我有一个解决方案,即对每一项执行forEach()函数,但我不认为这是最佳方法,因为我必须在一个巨大的数据集上迭代x次,而不是一次搜索。
这个"hacky"解决方案在将每个项推送到数组时提供了所需的输出:

let whatIwantArray = []

jmesSearches = ["domains[]", "subdomains[]"]

jmesSearches.forEach((jmesSearch) => {
  const result = JMESPath.search(arrayItem, jmesSearch)

    result.forEach((domain) => {
    whatIWantArray.push(domain)
  })
})
console.log(whatIwantAraay)

循环的输出,也是JEMSPath查询的预期输出:

["somedomain.com", "otherdomain.com", "mail", "docs"]

如何才能做到这一点?

oaxa6hgo

oaxa6hgo1#

您可以创建一个包含您感兴趣的两个数组的数组,然后使用 flatten运算符[] 将得到的数组的数组展开。
它会提供以下查询:

[domains, subdomains][]

所以你的JavaScript搜索结果是:

const result = JMESPath.search(arrayItem, '[domains, subdomains][]');

这将生成预期的数组:

[
  "somedomain.com",
  "otherdomain.com",
  "mail",
  "docs"
]

相关问题