代码之家  ›  专栏  ›  技术社区  ›  radicaled

json文件上的Jinja2模板

  •  1
  • radicaled  · 技术社区  · 4 年前

    我试图在json上运行jinja2模板。 这是我的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"
            ]
        }
    }
    

    我对这个问题有意见 所有者列表 . 我想当 应用程序列表 循环,循环 所有者列表 将重置。 我不明白在那种情况下如何管理名单。

    任何帮助都将不胜感激, 谢谢。

    0 回复  |  直到 4 年前
        1
  •  0
  •   radicaled    4 年前

    解决办法相当简单。

    {%- 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 }}
    

    在FOR apps\u列表之后,我添加了一个{%-set owners\u list=[]-%}。
    在第一场比赛结束前,我也试着这么做,但没有成功。