考虑到我们有这个JSON:
{
"A":[
{
"AT":"text"
},
{
"AT":"text2"
}
],
"B":[
{
"name":"text",
"power":10
},
{
"name":"text1",
"power":20
},
{
"name":"text2",
"power":40
}
]
}
我想返回“ AT”以及与“ AT”相对应的幂,所以我不想返回“ text1”,而只想返回[["text",10],["text2",40]]
。此查询[A[*].AT,B[*].power]
返回:[["text","text2"],[10,20,40]]
。因此,这并不是我想要的,因为我不需要额外的值:“ text1”中的20。我该如何解决?
编辑:我发现这部分代码root[*].B[?contains(['text','text2'],name)].[name,power][][]
返回["text",10,"text2",40]
,这是很好的结果,但查询不是动态的,因为在包含中我有这个['text','text2 ']并且如果可能的话,我想用嵌套查询替换这部分代码,那我该怎么做呢?
答案 0 :(得分:1)
我认为这是不可能的,因为据我所知,我们无法在JMES路径广告中存储变量,因此我们不能将数组过滤器中的current-node(@)用作@.B[?contains(@[].A[].AT,name)].[name,power][][]
。显然,一旦JMES Path进入节点B,它就不知道从节点A检索信息。您应该对以下查询使用jq:
( .B | map({(.name): .power}) | add ) as $b | .A | map(.AT | [., $b[.]]) | add