我有一个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过滤器似乎是适合这项工作的工具,但还没有找到一个能够完成我要找的工作的查询。
答案 0 :(得分:1)
首先,如果可以,我建议重新格式化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的用户名。
你可以设置另一个包含管理员和用户的事实