JMESPath: в dict объедините значение массива со скалярным значением, чтобы получить список перекрестных продуктов - PullRequest
0 голосов
/ 25 апреля 2018

Есть ли какой-нибудь способ добиться следующего поведения в JMESPath?

У меня есть такой запрос:

{
    "foo": "aa", 
    "bars": [
        "bb", 
        "cc"
    ]
}

Я ищу результат, подобный следующему.Скалярное значение «aa» должно быть объединено с каждым элементом массива «bars», чтобы получить массив плоских диктов.(Переход с «баров» на «бар» был бы хорош, но не обязателен, в основном я ищу комбинацию элементов.)

[
    {
        "foo": "aa",
        "bar": "bb"
    },
    {
        "foo": "aa",
        "bar": "cc"
    }
]

Было бы здорово, если бы кто-то знал способдостичь этого.

1 Ответ

0 голосов
/ 14 июня 2018

Это , в настоящее время невозможно , и для него потребуется иметь возможность доступа к родительскому объекту в выражении. Функция была запрошена в выпуске github # 22 * ​​1006 *.


Прямо сейчас вы можете создать список объектов , а не , содержащий foo:

map(&{bar: @}, bars)

возвращает

[
  {
    "bar": "bb"
  },
  {
    "bar": "cc"
  }
]

Конечно, вы можете добавить foo со статическим значением, подобным этому:

map(&{foo: "aa", bar: @}, bars)

Однако, предполагая, что функция родительского объекта будет реализована как переменная $, как было предложено в этом комментарии github, вы получите желаемый результат, используя выражение

map(&{foo: $, bar: @}, bars)

Обратите внимание, что еще не работает .

...