[英]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.