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