jsonata фильтр по "внешнему" свойству - PullRequest
0 голосов
/ 05 августа 2020

Мне нужно отфильтровать значения 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}]}
  ]
}

JSONata:

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

Проблема в том, что я не знаю, как ссылаться на свойство b для list1 в фильтре list2[a=b]

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

Ожидаемый результат :

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

Я знаю, что пример "глупый", но он просто иллюстрирует проблему. Мне было интересно, можно ли использовать некоторые временные переменные для решения этой проблемы?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 10 августа 2020

Вы можете использовать «родительский» оператор для ссылки на это «внешнее» свойство. Итак, если вы находитесь в контексте массива list2, вы можете обратиться к свойству 'b' списка list1, используя:

list1.list2[a = %.b]

См. https://docs.jsonata.org/path-operators# -parent

0 голосов
/ 05 августа 2020

хорошо Я нашел решение с темп. переменные:

JSONata:

{
    "result": $$.list1.(
        $b := b; /* temp var. */
        { 
           "v": list2[a=$b].{
              "v":a
        }
    })
}
...