json - Ansible 合并 2 个数组

标签 json ansible

我正在尝试使用 Ansible 合并以下 2 个数组:

TASK [Show var1] ****************************************************************************
ok: [localhost] => {
    "var1": [
        {
            "id": "133"
        },
        {
            "id": "149"
        },
        {
            "id": "188"
        }
    ]
}



TASK [Show var2] ****************************************************************************
ok: [localhost] => {
    "var2": [
        {
            "name": "two"
        },
        {
            "name": "one"
        },
        {
            "name": "three"
        }
    ]
}

结果应该是:
    "var1": [
        {
            "id": "133",
            "name": "two"
        },
        {
            "id": "149",
            "name": "one"
        },
        {
            "id": "188",
            "name": "three"
        }
    ]

到目前为止,我为合并所做的努力……只返回了最后一对。我怎样才能合并整个数组?

最佳答案

这是一种可能的解决方案;我们使用 set_factcombine过滤器,循环遍历 var1|zip(var2) :

- hosts: localhost
  gather_facts: false
  vars:
    var1:
      - id: 133
      - id: 149
      - id: 188
    var2:
      - name: two
      - name: one
      - name: three

  tasks:
    - set_fact:
        var3: "{{ var3 + [item[0]|combine(item[1])] }}"
      vars:
        var3: []
      loop: "{{ var1|zip(var2)|list }}"

    - debug:
        msg: "{{ var3 }}"

(有关 set_factcombine 的信息,请参阅文档)。

这将输出:

PLAY [localhost] *****************************************************************************************************************************************************************************

TASK [set_fact] ******************************************************************************************************************************************************************************
ok: [localhost] => (item=[{'id': 133}, {'name': 'two'}])
ok: [localhost] => (item=[{'id': 149}, {'name': 'one'}])
ok: [localhost] => (item=[{'id': 188}, {'name': 'three'}])

TASK [debug] *********************************************************************************************************************************************************************************
ok: [localhost] => {
    "msg": [
        {
            "id": 133,
            "name": "two"
        },
        {
            "id": 149,
            "name": "one"
        },
        {
            "id": 188,
            "name": "three"
        }
    ]
}

PLAY RECAP ***********************************************************************************************************************************************************************************
localhost                  : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

关于json - Ansible 合并 2 个数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61544406/

相关文章:

javascript - 转义/删除解析为 HTML 的 JSON 数据中的 <script> 标签

javascript - 如何使用 JSON 在谷歌地图中制作动态标记?

linux - Ansible将两个不同的文件变量调用到单个任务中循环遍历多个文件

Ansible 错误读取配置文件 : File contains no section headers

linux - 我如何使用 Ansible lineinfile 删除除少数特定行以外的所有行?

javascript - 从 JSON 数据获取特定属性

c# - 使用 ASP.NET Web API 返回 JSON 文件

java - 从 pojo : how do I add "description" automatically? 生成 JsonSchema

ansible - 无法使用 Ansible 复制模块复制目录

Ansible:从 git repo 克隆一个文件