# json\_query & regular expression

**URL:** <https://forum.ansible.com/t/json-query-regular-expression/32658>\
**Category:** Ansible Project\
**Created:** [April 12, 2020, 4:26am UTC](https://forum.ansible.com/t/json-query-regular-expression/32658 "2020-04-12T04:26:28Z")\
**Posts on this page:** 9\
**Page:** 1

<div class="post-metadata">

**Author:** ![Kiran\_Kumar](https://avatars.discourse-cdn.com/v4/letter/k/f475e1/32.png) [@Kiran\_Kumar](https://forum.ansible.com/u/Kiran_Kumar)\
**Post date:** [April 12, 2020, 4:26am UTC](https://forum.ansible.com/t/json-query-regular-expression/32658/1 "2020-04-12T04:26:28Z")

</div>

In jason query how can i add regular expression ? eg if have vm1, vm2,vm3 below query can be adjusted ? eg query: “[?guest\_name == ‘vm\*’]” , seems does not work in below case

[https://jmespath.org/specification.html#filterexpressions](https://jmespath.org/specification.html#filterexpressions) i tried few things but no luck

Thanks

---

<div class="post-metadata">

**Author:** ![vbotka](https://sea1.discourse-cdn.com/ansible/user_avatar/forum.ansible.com/vbotka/32/359_2.png) [@vbotka](https://forum.ansible.com/u/vbotka)\
**Post date:** [April 12, 2020, 5:01am UTC](https://forum.ansible.com/t/json-query-regular-expression/32658/2 "2020-04-12T05:01:47Z")

</div>

Filter "selectattr" should do the job. For example

&nbsp;&nbsp;&nbsp;&nbsp;- debug:  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;msg: "{{ item.ip\_address }}"  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;loop: "{{ vm\_facts|  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;selectattr('guest\_name', 'match', '^vm1$')|  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;list }}"  
&nbsp;&nbsp;&nbsp;&nbsp;- debug:  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;msg: "{{ item.ip\_address }}"  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;loop: "{{ vm\_facts|  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;selectattr('guest\_name', 'match', '^vm(.\*)$')|  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;list }}"

I'm not aware of regex in JMESPath.  
[https://jmespath.readthedocs.io/en/latest/](https://jmespath.readthedocs.io/en/latest/)

HTH,

&nbsp;&nbsp;-vlado

---

<div class="post-metadata">

**Author:** ![Kiran\_Kumar](https://avatars.discourse-cdn.com/v4/letter/k/f475e1/32.png) [@Kiran\_Kumar](https://forum.ansible.com/u/Kiran_Kumar)\
**Post date:** [April 12, 2020, 6:35am UTC](https://forum.ansible.com/t/json-query-regular-expression/32658/3 "2020-04-12T06:35:16Z")

</div>

Thanks for the Reply Valdo

I get error

TASK [debug] \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*  
fatal: [localhost]: FAILED! =\> {“msg”: “‘str object’ has no attribute ‘guest\_name’”}

---

<div class="post-metadata">

**Author:** ![vbotka](https://sea1.discourse-cdn.com/ansible/user_avatar/forum.ansible.com/vbotka/32/359_2.png) [@vbotka](https://forum.ansible.com/u/vbotka)\
**Post date:** [April 12, 2020, 7:01am UTC](https://forum.ansible.com/t/json-query-regular-expression/32658/4 "2020-04-12T07:01:07Z")

</div>

> I get error  
> TASK [debug]

\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\>  
fatal: [localhost]: FAILED! =\> {"msg": "'str object' has no attribute

> 'guest\_name'"}

Take a look at the structure of "vm\_fact" and fix it. If you still have issues  
post:

&nbsp;&nbsp;&nbsp;&nbsp;- debug:  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var: vm\_fact

---

<div class="post-metadata">

**Author:** ![Kiran\_Kumar](https://avatars.discourse-cdn.com/v4/letter/k/f475e1/32.png) [@Kiran\_Kumar](https://forum.ansible.com/u/Kiran_Kumar)\
**Post date:** [April 12, 2020, 7:26am UTC](https://forum.ansible.com/t/json-query-regular-expression/32658/5 "2020-04-12T07:26:39Z")

</div>

Thanks for your reply Valdo. This is a JSON output

{  
“attributes”: {},  
“cluster”: “xx”,  
“esxi\_hostname”: “xx”,  
“guest\_fullname”: “Microsoftxx”,  
“guest\_name”: “xx”,  
“ip\_address”: “xx”,  
“mac\_address”: [  
“xx”  
],  
“power\_state”: “poweredOn”,  
“tags”: ,  
“uuid”: “xx”,  
“vm\_network”: {  
“xx”: {  
“ipv4”: [  
“xx”  
],  
“ipv6”:   
}

I am reading about - selectattr - as i am new to this.

Thanks

---

<div class="post-metadata">

**Author:** ![vbotka](https://sea1.discourse-cdn.com/ansible/user_avatar/forum.ansible.com/vbotka/32/359_2.png) [@vbotka](https://forum.ansible.com/u/vbotka)\
**Post date:** [April 12, 2020, 11:56am UTC](https://forum.ansible.com/t/json-query-regular-expression/32658/6 "2020-04-12T11:56:31Z")

</div>

There shouldn't be any problem with the dictionary "vm\_facts" you posted. The  
attribute "guest\_name" is in place. I can't explain the error. It's up to you  
to fix the JSON paths.

---

<div class="post-metadata">

**Author:** ![Akasurde](https://sea1.discourse-cdn.com/ansible/user_avatar/forum.ansible.com/akasurde/32/230_2.png) [@Akasurde](https://forum.ansible.com/u/Akasurde)\
**Post date:** [April 12, 2020, 4:01pm UTC](https://forum.ansible.com/t/json-query-regular-expression/32658/7 "2020-04-12T16:01:33Z")

</div>

I would do this in a simpler way -

- name: Gather all VMs information  
vmware\_vm\_info:  
hostname: ‘{{ vcenter\_hostname }}’  
username: ‘{{ vcenter\_username }}’  
password: ‘{{ vcenter\_password }}’  
validate\_certs: no  
register: vm\_facts  
delegate\_to: localhost

- debug:  
msg: “{{ item.ip\_address }}”  
loop: “{{ vm\_facts.virtual\_machines }}”  
when:

- item.guest\_name | regex\_search(‘^vm’)

---

<div class="post-metadata">

**Author:** ![Akasurde](https://sea1.discourse-cdn.com/ansible/user_avatar/forum.ansible.com/akasurde/32/230_2.png) [@Akasurde](https://forum.ansible.com/u/Akasurde)\
**Post date:** [April 12, 2020, 4:04pm UTC](https://forum.ansible.com/t/json-query-regular-expression/32658/8 "2020-04-12T16:04:38Z")

</div>

Even this works for me - notice `vm_facts.virtual_machines`

- debug:  
msg: “{{ item.ip\_address }}”  
loop: “{{ vm\_facts.virtual\_machines | selectattr(‘guest\_name’, ‘match’, ‘^vm(.\*)$’)| list }}”

---

<div class="post-metadata">

**Author:** ![Kiran\_Kumar](https://avatars.discourse-cdn.com/v4/letter/k/f475e1/32.png) [@Kiran\_Kumar](https://forum.ansible.com/u/Kiran_Kumar)\
**Post date:** [April 12, 2020, 9:08pm UTC](https://forum.ansible.com/t/json-query-regular-expression/32658/9 "2020-04-12T21:08:57Z")

</div>

Thanks Abhijeet & Valdo for your time to check. This works !
