在Ansible剧本中以json格式过滤输出

时间:2019-05-29 14:42:01

标签: json ansible

我有一个如下的json文件

"data": [

   {
      "name": "first",
      "foo": "123",
      "item": "monday"
  },

  {
      "name": "second",
      "foo": "456",
      "item": "tuesday"
      },

      { 
      "name": "third",
      "foo": "789",
      "item": "wednesday"}

  ]
}

现在,当我的可折叠剧本中的item为星期三时,我需要foo的值

我使用了以下json查询,但未能获得所需的输出

- name: Get foo value.
  set_fact:
     foo_value: "{{ (json.stdout | from_json).data | map(attribute='foo') | list }}"

当我提到foo_value : 789时,我需要item : wednesday,请让我知道我做错了什么

1 个答案:

答案 0 :(得分:0)

  

当我提到foo_value : 789时,我需要item : wednesday,请让我知道我做错了什么

您做错的第一件事是没有在表达中的任何地方提及item;也就是说,您正在寻找的是selectattr

set_fact:
  foo_value: "{{ (json.stdout | from_json).data
    | selectattr('item', 'eq', 'wednesday')
    | map(attribute='foo') | list }}"