使用json查询ansible从json中提取多个值
我有以下输出(代码段):使用json查询ansible从json中提取多个值,json,ansible,Json,Ansible,我有以下输出(代码段): msg: "{{ item }}" with_items: "{{ output.ansible_facts.openstack_servers.content | from_json | json_query('[status, flavor]') }}" 当我尝试获取状态值时: msg: "{{ output.ansible_facts.openstack_servers | json_query('[].status')}}"
msg: "{{ item }}"
with_items: "{{ output.ansible_facts.openstack_servers.content | from_json | json_query('[status, flavor]') }}"
当我尝试获取状态值时:
msg: "{{ output.ansible_facts.openstack_servers | json_query('[].status')}}"
msg: "{{ item }}"
with_items: "{{ output.ansible_facts.openstack_servers.content | from_json | json_query('[status, flavor]') }}"
它很好用
msg: "{{ item }}"
with_items: "{{ output.ansible_facts.openstack_servers.content | from_json | json_query('[status, flavor]') }}"
我想提取几个值,但以下操作无效:
msg: "{{ output.ansible_facts.openstack_servers | json_query('[status, flavor, az]')}}"
msg: "{{ item }}"
with_items: "{{ output.ansible_facts.openstack_servers.content | from_json | json_query('[status, flavor]') }}"
或
msg: "{{ item }}"
with_items: "{{ output.ansible_facts.openstack_servers.content | from_json | json_query('[status, flavor]') }}"
我的语法有什么问题?仔细阅读,他们确实有一个可能与您相关的示例
msg: "{{ item }}"
with_items: "{{ output.ansible_facts.openstack_servers.content | from_json | json_query('[status, flavor]') }}"
给定数据结构:
msg: "{{ item }}"
with_items: "{{ output.ansible_facts.openstack_servers.content | from_json | json_query('[status, flavor]') }}"
它们提供了一个查询多个值的示例,这些值作为散列映射到结果输出
msg: "{{ item }}"
with_items: "{{ output.ansible_facts.openstack_servers.content | from_json | json_query('[status, flavor]') }}"
在本例中,我们得到了一个包含所有端口和端口名的哈希映射
群集:
msg: "{{ item }}"
with_items: "{{ output.ansible_facts.openstack_servers.content | from_json | json_query('[status, flavor]') }}"
请注意,他们只是使用vars:
来定义查询,表面上是为了可读性,但重要的一点就在这里:
msg: "{{ item }}"
with_items: "{{ output.ansible_facts.openstack_servers.content | from_json | json_query('[status, flavor]') }}"
domain.server[?cluster=='cluster2']。{name:name,port:port}
msg: "{{ item }}"
with_items: "{{ output.ansible_facts.openstack_servers.content | from_json | json_query('[status, flavor]') }}"
因此,他们正在查询domain.server(这是一个字典列表,每个字典都具有相同的属性),只选择cluster
值为cluster2
的字典,然后为每个字典返回name
作为name
和port
作为port
msg: "{{ item }}"
with_items: "{{ output.ansible_facts.openstack_servers.content | from_json | json_query('[status, flavor]') }}"
在本例中,您希望返回多个属性,但不希望选择具有特定值的项。因此,您可以使用更类似于:
msg: "{{ item }}"
with_items: "{{ output.ansible_facts.openstack_servers.content | from_json | json_query('[status, flavor]') }}"
msg: "{{ my_var | json_query('domain.server[*].{name: name, cluster: cluster}') }}"
我得到的结果是:
msg: "{{ item }}"
with_items: "{{ output.ansible_facts.openstack_servers.content | from_json | json_query('[status, flavor]') }}"
"msg": [
{
"cluster": "cluster1",
"name": "server11"
},
{
"cluster": "cluster1",
"name": "server12"
},
{
"cluster": "cluster2",
"name": "server21"
},
{
"cluster": "cluster2",
"name": "server22"
}
]
TLDR:根据您的具体问题和用例,我相信您想要的是:
msg: "{{ item }}"
with_items: "{{ output.ansible_facts.openstack_servers.content | from_json | json_query('[status, flavor]') }}"
msg: "{{ output.ansible_facts.openstack_servers | json_query('[*].{status: status, flavor: flavor, az: az}') }}"
谢谢,希望对你有帮助 非常感谢!它起作用了。那正是我想要的。
msg: "{{ item }}"
with_items: "{{ output.ansible_facts.openstack_servers.content | from_json | json_query('[status, flavor]') }}"