JMESPath - 如何修剪一棵树
JMESPath - how to prune a tree
我有一个 JSON 数据结构(实际上是 YAML)并想重新格式化该结构,但不知道如何让它正常工作。这将在 Ansible 的 jinja2 模板中使用。我尝试使用的工具是 json_query 过滤器,它使用 JMESPath。
输入:
"users": {
"Administrators": [
"user1",
"user2": {
"ssh_keys": "...."
},
"user3"
],
"Users": [
"user4"
]
}
我想把这个 JSON 改造成这个(去掉过程中的 ssh_key 部分)
"Administrators": [
"user1",
"user2",
"user3"
],
"Users": [
"user4"
]
我如何在 jinja2 中做到这一点?我找到了 json_query 过滤器,它似乎是完成这项工作的正确工具,但还没有找到一个查询来完成我正在寻找的东西。
首先,如果可以的话,我会建议重新格式化 json。
一个好的格式会使这变得非常容易,例如:
"users": {
"Administrators": [
{"name": "user1, "ssh_keys": None},
{"name": "user2, "ssh_keys": "...."},
{"name": "user3, "ssh_keys": None},
],
"Users": [
"user4"
]
}
如果您无法这样做,请尝试这个(这是指 Administrators
但适用于任何情况):
- set_fact:
admins: "{{ (users | json_query(item) | default([])) | union(admins | default([])) }}"
with_items:
- "Administrators[?type(@) == 'object'][keys(@)][][]"
- "Administrators[?type(@)=='string']"
这将创建一个 admins
数组,其中仅包含您的用户 json 的用户名。
比你可以设置另一个包含管理员和用户的事实
我有一个 JSON 数据结构(实际上是 YAML)并想重新格式化该结构,但不知道如何让它正常工作。这将在 Ansible 的 jinja2 模板中使用。我尝试使用的工具是 json_query 过滤器,它使用 JMESPath。
输入:
"users": {
"Administrators": [
"user1",
"user2": {
"ssh_keys": "...."
},
"user3"
],
"Users": [
"user4"
]
}
我想把这个 JSON 改造成这个(去掉过程中的 ssh_key 部分)
"Administrators": [
"user1",
"user2",
"user3"
],
"Users": [
"user4"
]
我如何在 jinja2 中做到这一点?我找到了 json_query 过滤器,它似乎是完成这项工作的正确工具,但还没有找到一个查询来完成我正在寻找的东西。
首先,如果可以的话,我会建议重新格式化 json。 一个好的格式会使这变得非常容易,例如:
"users": {
"Administrators": [
{"name": "user1, "ssh_keys": None},
{"name": "user2, "ssh_keys": "...."},
{"name": "user3, "ssh_keys": None},
],
"Users": [
"user4"
]
}
如果您无法这样做,请尝试这个(这是指 Administrators
但适用于任何情况):
- set_fact:
admins: "{{ (users | json_query(item) | default([])) | union(admins | default([])) }}"
with_items:
- "Administrators[?type(@) == 'object'][keys(@)][][]"
- "Administrators[?type(@)=='string']"
这将创建一个 admins
数组,其中仅包含您的用户 json 的用户名。
比你可以设置另一个包含管理员和用户的事实