繁体   English   中英

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

[英]Can I do multiple search strings in a single JMESPath search?

我希望能够使用 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"]

如何才能做到这一点?

您可以制作您感兴趣的两个数组的数组,然后使用展平运算符[]平结果数组。

这给你查询:

[domains, subdomains][]

所以你的 JavaScript 搜索结果是:

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

这将产生预期的数组:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM