Ansible合并json对象

Ansible合并json对象,ansible,Ansible,我需要根据第一个对象键合并两个JSON对象 object1 = { "params" : { "type": ["type1", "type2"], "requeststate": [] } } object2 = { "params" : { "type": ["type2", "type3", "type4"], "requeststate": ["Original", "Revised" ], "responsestate":

我需要根据第一个对象键合并两个JSON对象

object1 = {
 "params" : {
    "type": ["type1", "type2"],
    "requeststate": []
 }        
}

object2 = {
 "params" : {
    "type": ["type2", "type3", "type4"],
    "requeststate": ["Original", "Revised" ],
    "responsestate": ["Approved" ]
 }        
}
我需要根据第一个对象键合并两个对象,我的输出应该如下所示

mergedobject = {
 "params" : {
    "type": ["type1", "type2", "type3", "type4"],
    "requeststate": ["Original", "Revised"]
 }        
}
我找了我的案子,没有找到太多细节 请让我知道是否可以使用ansible

我可以将数组与

  set_fact:
    mergedrequeststate: "{{ object1.params.requeststate +  object2.params.requeststate  }}"
但是我的案例涉及15个以上的params对象,我不能声明所有的param对象。此外,它可能会在未来增长,我需要处理,如果可能的话

如果您需要更多详细信息,请发表评论。 感谢您的支持

使用过滤器


需求描述得很好,我只想补充一点,您希望合并键,并从两个对象中获得
唯一的
值(如果不是这样,请注意下面PB中的
联合
过滤器)。此外,您的示例变量假定我们希望合并
objectX.params
下的键

没有进一步的到期,这里是一个PB,将让你去。有一个调试步骤来显示
object1的所有键。params
有一个循环来合并两个对象的值,然后是最终打印

PB:

执行结果:

[http_offline@greenhat-29 tests]$ ansible-playbook test.yml 

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

TASK [print all the keys in the object1.params variable] ***************************************************************************************************************************************************************
ok: [localhost] => {
    "msg": [
        "type",
        "requeststate"
    ]
}

TASK [for each key, merge from the 2 variables] ************************************************************************************************************************************************************************
ok: [localhost] => (item=type)
ok: [localhost] => (item=requeststate)

TASK [print final result] **********************************************************************************************************************************************************************************************
ok: [localhost] => {
    "mergedobj": {
        "requeststate": [
            "Original",
            "Revised"
        ],
        "type": [
            "type1",
            "type2",
            "type3",
            "type4"
        ]
    }
}

PLAY RECAP *************************************************************************************************************************************************************************************************************
localhost                  : ok=3    changed=0    unreachable=0    failed=0   

[http_offline@greenhat-29 tests]$ 
希望能有帮助

---
- hosts: localhost
  gather_facts: false
  vars:
    object1:
      params:
        type:
        - type1
        - type2
        requeststate: []
    object2:
      params:
        type:
        - type2
        - type3
        - type4
        requeststate:
        - Original
        - Revised
        responsestate:
        - Approved

  tasks:

  - name: print all the keys in the object1.params variable
    debug:
      msg: "{{ object1['params'].keys() | list }}"

  - name: for each key, merge from the 2 variables
    set_fact:
      mergedobj: "{{ mergedobj|default({}) | combine({item: object1['params'][item] | union(object2['params'][item]) }) }}"
    with_items:
    - "{{ object1['params'].keys() | list }}"

  - name: print final result
    debug:
      var: mergedobj
[http_offline@greenhat-29 tests]$ ansible-playbook test.yml 

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

TASK [print all the keys in the object1.params variable] ***************************************************************************************************************************************************************
ok: [localhost] => {
    "msg": [
        "type",
        "requeststate"
    ]
}

TASK [for each key, merge from the 2 variables] ************************************************************************************************************************************************************************
ok: [localhost] => (item=type)
ok: [localhost] => (item=requeststate)

TASK [print final result] **********************************************************************************************************************************************************************************************
ok: [localhost] => {
    "mergedobj": {
        "requeststate": [
            "Original",
            "Revised"
        ],
        "type": [
            "type1",
            "type2",
            "type3",
            "type4"
        ]
    }
}

PLAY RECAP *************************************************************************************************************************************************************************************************************
localhost                  : ok=3    changed=0    unreachable=0    failed=0   

[http_offline@greenhat-29 tests]$