我有样品清单,我想选择其类型在wanted_list中的项目。
- name: Get item based on anther list
vars:
samples:
- { item: 10, type: sample-1 },
- { item: 20, type: sample-11 },
- { item: 30, type: sample-2 }
wanted_list: [ sample-11, sample-2 ]
query: "[?contains('{{wanted_list|to_json}}', type)]"
debug:
var: samples | json_query(query)
结果:
TASK: Get item based on anther list
ok: [localhost] => {
"samples|json_query(query)": [
{
"item": 10,
"type": "sample-1"
},
{
"item": 20,
"type": "sample-11"
},
{
"item": 30,
"type": "sample-2"
}
]
}
我所期望的是它将仅返回项目20和30。但是实际上返回了所有3。它看起来像sample-1匹配列表项sample-11的一部分。
但是基于JMESPath的文档包含:
boolean contains(array | string $ subject,any $ search)
如果$ subject是一个数组,则如果数组中的元素之一等于提供的$ search值,则此函数返回true。
因此,sample-1不等于sample-11,因此不应选择它。
您将需要使用反引号来像这样引用文字JSON,因为单引号仅用于字符串
- name: Get item based on anther list
vars:
samples:
- { item: 10, type: sample-1 }
- { item: 20, type: sample-11 }
- { item: 30, type: sample-2 }
wanted_list: [ sample-11, sample-2 ]
query: "[?contains(`{{ wanted_list | to_json }}`, type)]"
debug:
msg: '{{ samples | json_query(query) }}'