community / community.general / 6.6.8 / filter / json_query Select a single element or a data subset from a complex data structure Authors: unknowncommunity.general.json_query (6.6.8) — filter
Install with ansible-galaxy collection install community.general:==6.6.8
collections: - name: community.general version: 6.6.8
This filter lets you query a complex JSON structure and iterate over it using a loop structure.
- name: Define data to work on in the examples below ansible.builtin.set_fact: domain_definition: domain: cluster: - name: cluster1 - name: cluster2 server: - name: server11 cluster: cluster1 port: '8080' - name: server12 cluster: cluster1 port: '8090' - name: server21 cluster: cluster2 port: '9080' - name: server22 cluster: cluster2 port: '9090' library: - name: lib1 target: cluster1 - name: lib2 target: cluster2
- name: Display all cluster names ansible.builtin.debug: var: item loop: "{{ domain_definition | community.general.json_query('domain.cluster[*].name') }}"
- name: Display all server names ansible.builtin.debug: var: item loop: "{{ domain_definition | community.general.json_query('domain.server[*].name') }}"
- name: Display all ports from cluster1 ansible.builtin.debug: var: item loop: "{{ domain_definition | community.general.json_query(server_name_cluster1_query) }}" vars: server_name_cluster1_query: "domain.server[?cluster=='cluster1'].port"
- name: Display all ports from cluster1 as a string ansible.builtin.debug: msg: "{{ domain_definition | community.general.json_query('domain.server[?cluster==`cluster1`].port') | join(', ') }}"
- name: Display all ports from cluster1 ansible.builtin.debug: var: item loop: "{{ domain_definition | community.general.json_query('domain.server[?cluster==''cluster1''].port') }}"
- name: Display all server ports and names from cluster1 ansible.builtin.debug: var: item loop: "{{ domain_definition | community.general.json_query(server_name_cluster1_query) }}" vars: server_name_cluster1_query: "domain.server[?cluster=='cluster2'].{name: name, port: port}"
- name: Display all ports from cluster1 ansible.builtin.debug: msg: "{{ domain_definition | to_json | from_json | community.general.json_query(server_name_query) }}" vars: server_name_query: "domain.server[?starts_with(name,'server1')].port"
- name: Display all ports from cluster1 ansible.builtin.debug: msg: "{{ domain_definition | to_json | from_json | community.general.json_query(server_name_query) }}" vars: server_name_query: "domain.server[?contains(name,'server1')].port"
expr: description: - The query expression. - See U(http://jmespath.org/examples.html) for examples. required: true type: string _input: description: - The JSON data to query. required: true type: any
_value: description: The result of the query. type: any