如何 return 子节点和父节点属性在同一个查询 JMES Path for JSON object
How to return a child node and a parent node attribute in the same query JMES Path for JSON object
考虑一下我们有这个 JSON:
{
"A":[
{
"AT":"text"
},
{
"AT":"text2"
}
],
"B":[
{
"name":"text",
"power":10
},
{
"name":"text1",
"power":20
},
{
"name":"text2",
"power":40
}
]
}
我想要return"AT"和"AT"对应的幂,所以我不想return"text1"只是[["text",10],["text2",40]]
。此查询 [A[*].AT,B[*].power]
return 此:[["text","text2"],[10,20,40]]
。所以这不是我想要的,因为我不想要额外的值:"text1" 中的 20。我该如何解决?
编辑:我发现这部分代码 @.B[?contains(['text','text2'],name)].[name,power][][]
它 return ["text",10,"text2",40]
这是很好的结果,但查询不是动态的,因为在包含我有这个 [ 'text','text2'] 如果可能的话,我想用嵌套查询替换这部分代码,那么,我该怎么做呢?
我认为这是不可能的,因为据我所知,我们不能在 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
考虑一下我们有这个 JSON:
{
"A":[
{
"AT":"text"
},
{
"AT":"text2"
}
],
"B":[
{
"name":"text",
"power":10
},
{
"name":"text1",
"power":20
},
{
"name":"text2",
"power":40
}
]
}
我想要return"AT"和"AT"对应的幂,所以我不想return"text1"只是[["text",10],["text2",40]]
。此查询 [A[*].AT,B[*].power]
return 此:[["text","text2"],[10,20,40]]
。所以这不是我想要的,因为我不想要额外的值:"text1" 中的 20。我该如何解决?
编辑:我发现这部分代码 @.B[?contains(['text','text2'],name)].[name,power][][]
它 return ["text",10,"text2",40]
这是很好的结果,但查询不是动态的,因为在包含我有这个 [ 'text','text2'] 如果可能的话,我想用嵌套查询替换这部分代码,那么,我该怎么做呢?
我认为这是不可能的,因为据我所知,我们不能在 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