从JSON提取var

时间:2018-12-18 22:57:35

标签: json ansible ansible-2.x

我正在使用URI模块,并且收到了JSON响应。到目前为止,这是我的剧本。

.. some playbook ..
   register: output

  - debug: msg="{{ output }}"

  - name: get job id
    set_fact:
      job_id: "{{ output.json.results }}"

  - debug: msg="{{ job_id }}"

以下是上述调试中的job_id输出:

ok: [localhost] => {
    "msg": [
        {
            "approval_state": "pending_approval",
            "created_on": "2018-12-18T22:48:40Z",
            "description": "Provision from [tpl] to [test]",
            "href": "https://foo.ca/api/provision_requests/1000000000143",
            "id": "1000000000143",
            "message": "VM Provisioning - Request Created",
            "options": {
                "addr_mode": [
                    "dhcp",
                    "DHCP"
                ],
                "auto_approve": false,
                "cluster_filter": [
                    null,
                    null
                ],
                "cores_per_socket": [
                    2,
                    "2"
                ],

我想在上面的JSON输出的第5行中提取“ id”。有任何想法吗? 我尝试了output.json.results.id,但该错误没有找到对象ID

1 个答案:

答案 0 :(得分:0)

如果查看生成的JSON,则实际上有一个字典列表,尽管在这种情况下,您有一个包含单个字典的列表。因此,给出确切的示例:

- debug:
    msg: "{{ job_id[0].id }}"

将提取id字段。

如果要从列表中的每个词典中提取id字段(假设可以使用多个词典),则可以执行以下操作:

- debug:
    msg: "{{ job_id | map(attribute='id') | list }}"

这将产生一个简单列表,其中包含每个词典中id字段的内容。