[英]How to combine 2 list based on a common key value in Ansible Jinja2
我正在尝试根据 JSON 数组中的公共键(organizationId)值将特定值组合到列表中。 在这里,我使用 Jinja 模板创建 Json 文件,该文件将用于进一步处理。 所以这里sample.json是 JSON 文件, test.j2 (Jinja 模板)将从该文件中获取值以生成最终的 JSON(下面提到的预期输出)
样品.json
[
{
"id": "111222333444627213",
"organizationId": "111222333444624074"
},
{
"id": "111222333444627214",
"organizationId": "111222333444624074"
},
{
"id": "111222333444627216",
"organizationId": "111222333444624074"
},
{
"id": "111222333444627217",
"organizationId": "12345678"
}
]
test.j2(神社)
[
{% for dict_item in sample.json %}
{
"orgid":"{{dict_item['organizationId']}}",
"objectIds":[
"{{ dict_item['id']}}"
]
}{% if not loop.last %},
{% endif %}
{% endfor %}
]
预计 Output
[
{
"orgid":"111222333444624074",
"objectIds":[
"111222333444627213",
"111222333444627214",
"111222333444627216",
]
},
{
"orgid":"12345678",
"objectIds":[
"111222333444627217"
]
}
]
不需要 Jinja2。 相反,迭代由过滤器groupby创建的列表。 例如
- set_fact:
output: "{{ output|d([]) + [{'orgid': item.0,
'objectIds': item.1|
map(attribute='id')|
list}] }}"
loop: "{{ sample.json|groupby('organizationId') }}"
给
output:
- objectIds:
- '111222333444627213'
- '111222333444627214'
- '111222333444627216'
orgid: '111222333444624074'
- objectIds:
- '111222333444627217'
orgid: '12345678'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.