基于json文件的Jinja2模板

问题描述 投票:1回答:1

我正在尝试在json上运行Jinja 2模板。这是我拥有的json文件:

{
"results": [
    {
        "Apps": [
                  {
            "owner": "owner1",
            "AppNm": "App1"
          }
                ],
        "server": "server1"
    },
        {
        "Apps": [
                  {
            "owner": "owner3",
            "AppNm": "App1"
          },
                  {
            "owner": "owner2",
            "AppNm": "App2"
          }
                ],
        "server": "server2"
        }
  ]
}

这是我正在使用的模板:

{%- set app_srv = {} -%}
{%- set apps_list = [] -%}
{%- set owners_list = [] -%}

{%- for srv_chg in server_changes.results -%}
        {%- for srv_chg_item in srv_chg.Apps -%}
                {%- if srv_chg_item.AppNm not in apps_list -%}
                        {{ apps_list.append( srv_chg_item.AppNm ) }}
                {%- endif -%}
        {%- endfor -%}
{%- endfor -%}

{%- for apps_item in apps_list -%}
        {%- for srv_chg in server_changes.results -%}
                {%- for srv_chg_item in srv_chg.Apps -%}
                        {%- if srv_chg_item.owner not in owners_list and srv_chg_item.AppNm == apps_item -%}
                                {{ owners_list.append( srv_chg_item.owner ) }}
                        {%- endif -%}
                {%- endfor -%}
        {%- endfor -%}
        {{ app_srv.update({apps_item: {'owner': owners_list}}) }}
{%- endfor -%}

{{ app_srv|to_nice_json }}

基本思想是以应用程序/服务器方式而不是服务器/应用程序方式重组json。

这是我从模板得到的输出:

{
    "App1": {
        "owner": [
            "owner1",
            "owner3",
            "owner2"
        ]
    },
    "App2": {
        "owner": [
            "owner1",
            "owner3",
            "owner2"
        ]
    }
}

这是我需要的模板输出:

{
    "App1": {
        "owner": [
            "owner1",
            "owner3"
        ]
    },
    "App2": {
        "owner": [
            "owner2"
        ]
    }
}

我对owners_list有问题。但是,当apps_list循环时,owners_list将重置。在这种情况下,我不明白如何管理列表。

任何帮助,谢谢。

json templates jinja2
1个回答
0
投票

解决方案非常简单。

{%- set app_srv = {} -%}
{%- set apps_list = [] -%}
{%- set owners_list = [] -%}

{%- for srv_chg in server_changes.results -%}
        {%- for srv_chg_item in srv_chg.Apps -%}
                {%- if srv_chg_item.AppNm not in apps_list -%}
                        {{ apps_list.append( srv_chg_item.AppNm ) }}
                {%- endif -%}
        {%- endfor -%}
{%- endfor -%}

{%- for apps_item in apps_list -%}
        {%- set owners_list = [] -%}
        {%- for srv_chg in server_changes.results -%}
                {%- for srv_chg_item in srv_chg.Apps -%}
                        {%- if srv_chg_item.owner not in owners_list and srv_chg_item.AppNm == apps_item -%}
                                {{ owners_list.append( srv_chg_item.owner ) }}
                        {%- endif -%}
                {%- endfor -%}
        {%- endfor -%}
        {{ app_srv.update({apps_item: {'owner': owners_list}}) }}
{%- endfor -%}

{{ app_srv|to_nice_json }}

在apps_list的FOR之后,我添加了{%-set owner_list = []-%}。试图在第一次结束之前做同样的事情,但是没有用。

© www.soinside.com 2019 - 2024. All rights reserved.