我有一个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的用户名。您可以设置包含管理员和用户的另一个事实