json - json 文件上的 Jinja2 模板
问题描述
我正在尝试在 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"
]
}
}
我遇到了owner_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 }}
在应用程序列表的 FOR 之后,我添加了一个 {%-set owner_list = [] -%}。
尝试在第一个结束前做同样的事情,但没有成功。
推荐阅读
- sql - 如何确定 Azure 上慢速 sql 查询的瓶颈
- c# - Unity C# UnassignedReferenceException
- javascript - JScript - 包含表中列的数组
- android-studio - Android Studio 和 gradle home 问题 - Ubuntu
- c# - 使用摄像头分析车库门状态
- javascript - 无论方法如何,Github Pages 和 React App 都无法正常工作
- java - Eclipse:JDK 9+ 不支持 clientBuilder.sslSocketFactory
- elasticsearch - Spring data elasticsearch RestHighLevelClient 选项参数
- spring - 防止 DispatcherServlet 在 Spring Boot Actuator 中记录端点
- python - 无法在 spaCy 中加载德国 BERT 模型