我正在尝试在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将重置。在这种情况下,我不明白如何管理列表。
任何帮助,谢谢。
解决方案非常简单。
{%- 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 = []-%}。试图在第一次结束之前做同样的事情,但是没有用。