我希望能够使用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"]
如何才能做到这一点?
1条答案
按热度按时间oaxa6hgo1#
您可以创建一个包含您感兴趣的两个数组的数组,然后使用 flatten运算符
[]
将得到的数组的数组展开。它会提供以下查询:
所以你的JavaScript搜索结果是:
这将生成预期的数组: