我正在调用Web服务并返回一些JSON。我想根据是否找到特定的name
值来有条件地运行后续任务。
例如,仅当nameExists
数组包含values
的{{1}}字段时,才设置值name
。因此,在这种情况下,将定义myDemo
:
nameExists
这是我当前正在尝试的:
...
"failed": false,
"json": {
"values": [{
"id": "1234",
"name": "myDemo"
},
{
"id": "6789",
"name": "myDemo2"
}]
},
"msg": "OK (100 bytes)"
...
这在某种程度上可行,但是它给了我完整的JSON输出,我所需要的只是一个true / false。
我是在正确的轨道上吗,还是有更好的方法来实现这一目标?
答案 0 :(得分:1)
您通常不会使用debug
任务来设置变量。您可能要使用set_fact
。如果我正确理解了您的问题,那么如果API响应的tagExists
列表中的项目之一包含true
{{,则想为values
设置布尔值name
1}}。可能看起来像这样:
myDemo
“但是等等!”,您说,“这不是布尔值!”。正确无误后,您可以像对待一样处理。例如,在使用该任务设置- set_fact:
tagExists: "{{ apiCheckResult.json|json_query('values[?name == `myDemo`]') }}"
之后,您可以执行以下操作:
tagExists
之所以可行,是因为在布尔上下文中非空列表的值为- debug:
msg: "The tag exists!"
when: tagExists
(空列表的值为true
)。上面的false
表达式在存在匹配项时返回一个非空列表,否则返回一个空列表。
如果您确实想要布尔值,则可以改为:
json_query