小编Ale*_*mer的帖子

用于展平对象数组的 JMESPath 表达式,每个对象都具有嵌套的对象数组

我有包含数据库数组的 JSON,每个数据库都有一个用户数组,例如

{"databases": [
  {"db": "db_a", "users": [{"name": "alice"}, {"name": "alex"}]},
  {"db": "db_b", "users": [{"name": "bob"}, {"name": "brienne"}]}
]}
Run Code Online (Sandbox Code Playgroud)

我想生成一个数据库和用户的平面数组,即

[
  {"db": "db_a", "name": "alice"},
  {"db": "db_a", "name": "alex"},
  {"db": "db_b", "name": "bob"},
  {"db": "db_b", "name": "brienne"}
]
Run Code Online (Sandbox Code Playgroud)

在 SQL 术语中,这将是笛卡尔连接或笛卡尔积,但我不确定树结构中的正确术语。到目前为止我最接近的是

databases[].users[]
Run Code Online (Sandbox Code Playgroud)

产生

databases[].users[]
Run Code Online (Sandbox Code Playgroud)

databases[].{db: db, name: users[].name}
Run Code Online (Sandbox Code Playgroud)

产生

[{"name": "alice"}, {"name": "alex"}, {"name": "bob"}, {"name": "brienne"}]
Run Code Online (Sandbox Code Playgroud)

附录:我很高兴接受“你不能用 JMESPath 做到这一点,这就是原因......”作为答案。HN 评论` `暗示了这一点

进行迭代时无法引用父级。为什么?迭代、[*] 和映射的所有选项都使用迭代项作为任何表达式的上下文。没有机会获得任何其他值

json ansible jmespath

8
推荐指数
1
解决办法
5351
查看次数

标签 统计

ansible ×1

jmespath ×1

json ×1