0

我需要list2按以下属性过滤值list1

JSON:

{
  "list1": [
    {"b":1, "list2": [{"a":1},{"a":2},{"a":3}]},
    {"b":2, "list2": [{"a":1},{"a":2},{"a":3}]},
    {"b":3, "list2": [{"a":1},{"a":2},{"a":3}]}
  ]
}

数据格式:

{
    "result": $$.list1.{ 
        "v": list2[a=b].{
            "v":a
        }
    }
}

问题是 - 我不知道如何引用过滤器b的属性list1list2[a=b]

https://try.jsonata.org/dxPC5s-zM

预期结果是:

{
  "result": [
    {"v":1},
    {"v":2},
    {"v":3}
  ]
}

我知道示例是“愚蠢的”,但它只是说明了问题。我想知道是否可以使用一些临时变量来解决它?

谢谢!

4

2 回答 2

0

好的,我找到了温度的解决方案。变量:

数据格式:

{
    "result": $$.list1.(
        $b := b; /* temp var. */
        { 
           "v": list2[a=$b].{
              "v":a
        }
    })
}
于 2020-08-05T15:54:45.687 回答
0

您可以使用“父”运算符来引用此“外部”属性。因此,如果您在 list2 数组的上下文中,则可以使用以下方法引用 list1 的“b”属性:

list1.list2[a = %.b]

请参阅https://docs.jsonata.org/path-operators#-parent

于 2020-08-10T10:15:49.603 回答