python - 去掉json对象最后一个对象的逗号
问题描述
我使用 jinja2 创建了一个模板,它按预期生成输出。
但是,我试图从生成的 JSON 的最后一个对象中删除逗号。我尝试使用 {% if loop.last %}
摆脱最后一个对象的逗号。
但是,我无法获得正确的输出。
{% if loop.last %}
{
"met" : {{j}},
"uri" : "{{i}}"
}
{% endif %}
下面是代码和输出
from jinja2 import Template
uri = ["example1.com","example2.com"]
metric_value = [1024, 2048]
template = Template('''\
[
{%- for i in uri -%}
{%- for j in met %}
{
"met" : {{j}},
"uri" : "{{i}}"
},
{%- endfor -%}
{%- endfor %}
]
''')
payload = template.render(uri=uri, met=metric_value)
print(payload)
输出:
[
{
"met" : 1024,
"uri" : "example1.com"
},
{
"met" : 2048,
"uri" : "example1.com"
},
{
"met" : 1024,
"uri" : "example2.com"
},
{
"met" : 2048,
"uri" : "example2.com"
},
]
解决方案
不要使用 Jinja2 手动生成 JSON。您不能希望在所有情况下都生成保存且有效的 JSON。
在较大的模板中嵌入 JSON 时,使用tojson
内置过滤器生成 JSON。它不包括尾随逗号。
我会用两个列表的产品传递现成的字典:
uri_per_metric = [{'met': m, 'uri': u} for u in uri for m in metric_value]
并在模板中使用
{{ uri_per_metric|tojson(indent=4) }}
演示:
>>> from jinja2 import Template
>>> uri = ["example1.com", "example2.com"]
>>> metric_value = [1024, 2048]
>>> uri_per_metric = [{'met': m, 'uri': u} for u in uri for m in metric_value]
>>> template = Template('''\
... <script type="text/javascript">
... data = {{ uri_per_metric|tojson(indent=4) }};
... </script>
... ''')
>>> payload = template.render(uri_per_metric=uri_per_metric)
>>> print(payload)
<script type="text/javascript">
data = [
{
"met": 1024,
"uri": "example1.com"
},
{
"met": 2048,
"uri": "example1.com"
},
{
"met": 1024,
"uri": "example2.com"
},
{
"met": 2048,
"uri": "example2.com"
}
];
</script>
当然,如果您正在生成application/json
响应(仅从Web 端点返回 JSON 数据)并且这不是更大模板的一部分,那么完全使用模板将是一个坏主意。在这种情况下,请使用您的 Web 框架可能具有的专用 JSON 支持,例如Flask 的jsonify()
响应工厂方法,或json.dumps()
直接生成输出。
推荐阅读
- reactjs - Material-ui 4.9.5 TextField 属性“必需”不起作用
- html - 调整子导航下拉菜单的位置
- python - 在 scikit-learn 估计器中保存 X、y 数据
- amazon-web-services - AWS Cloudfront 黑名单,通过 VPN 访问
- semantic-web - 寻找替代分类法(语义标记)
- c# - 如何使用 Action 调用泛型方法
在 C# 中使用反射的参数 - python - 未应用过滤器时如何使用 django-filters 保持页面分页?
- postgresql - Postgres:如何按带时区的字符串日期排序?
- python-3.x - 无法将 ICMP 响应写入 excel
- python - 在 Python 中尝试 RCON 连接 Rust(游戏)