У меня есть JSON, содержащий массив баз данных, каждая база данных имеет массив пользователей, например,
{"databases": [
{"db": "db_a", "users": [{"name": "alice"}, {"name": "alex"}]},
{"db": "db_b", "users": [{"name": "bob"}, {"name": "brienne"}]}
]}
Я хотел бы создать плоский массив баз данных и пользователей, т.е.
[
{"db": "db_a", "name": "alice"},
{"db": "db_a", "name": "alex"},
{"db": "db_b", "name": "bob"},
{"db": "db_b", "name": "brienne"}
]
В терминах SQL это будет декартово соединение или декартово произведение, но я не уверен в правильности термина в древовидной структуре. Самое близкое, что у меня есть, это
databases[].users[]
, который производит
[{"name": "alice"}, {"name": "alex"}, {"name": "bob"}, {"name": "brienne"}]
и
databases[].{db: db, name: users[].name}
, который производит
[
{"db": "db_a", "name": ["alice", "alex"]},
{"db": "db_b", "name": ["bob", "brienne"]}
]
Приложение: Я рад принять ответ «Вы не можете сделать это с JMESPath, вот почему ...». Комментарий HN `` намекает на это
не может ссылаться на родителей при выполнении итерации. Зачем? Все опции для итерации, [*] и map, все используют итеративный элемент в качестве контекста для любого выражения. Там нет возможности получить какие-либо другие значения в