繁体   English   中英

如何根据 Ansible Jinja2 中的公共键值组合 2 个列表

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM