You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python通过Jinja2模板渲染输出标准JSON格式的实现方法

Jinja2渲染输出标准JSON的实现方案

核心思路是按照JSON的语法结构重写模板,通过Jinja2内置循环变量控制分隔符,避免出现语法错误,不需要修改原有Python渲染的核心逻辑,仅调整模板即可,可选增加转义配置提升鲁棒性。

1. 修改模板文件test.j2

直接替换原有模板内容为以下写法:

[
{%- for item in final_lst %}
  {
    "sr": {{ item.service_role | tojson }},
    "fip": {{ item.first_ip | tojson }}
  }{% if not loop.last %},{% endif %}
{%- endfor %}
]

模板写法说明

  • 外层直接包裹JSON数组的方括号[],内部通过循环生成每个对象元素
  • 利用Jinja2循环内置的loop.last变量判断是否为最后一个元素,仅在非最后一个元素后添加逗号,彻底避免尾逗号导致的JSON解析失败
  • 使用|tojson过滤器处理字段值:该过滤器会自动为字符串值添加双引号、转义值内部的双引号、换行符等特殊字符,相比手动给变量套双引号的写法,不会因为字段值包含特殊字符生成无效JSON,鲁棒性更强
  • 精准使用{%- -%}空白控制标记,既消除了Jinja2语法块产生的多余空行,又保留了JSON的标准缩进格式,可读性不受影响

2. (可选)环境配置优化

如果业务场景中字段值可能包含大量特殊字符,可以在初始化Jinja2环境时显式配置转义规则,进一步降低格式错误概率,修改Python侧的Environment初始化代码即可:

from jinja2 import Environment, FileSystemLoader

env = Environment(
    loader=FileSystemLoader('templates'),
    autoescape=False  # 已使用tojson过滤器,关闭全局自动转义避免重复转义
)
int_template = env.get_template('test.j2')     

out = int_template.render(final_lst=final_lst)
print(out)

3. 输出验证

运行代码后将直接输出符合要求的标准JSON结构,和预期结果完全一致:

[
  {
    "sr": "do_not_use",
    "fip": "10.7.17.1"
  },
  {
    "sr": "role_a",
    "fip": "10.7.17.10"
  },
  {
    "sr": "role_a",
    "fip": "10.7.17.56"
  }
]

常见踩坑提示

  • 不要给所有Jinja2语法块都加-%}结尾,过度压缩空白会导致JSON结构挤在一起,甚至把不同元素的键值对拼到同一行破坏语法
  • 不要手动给变量套双引号后直接输出,一旦字段值里包含双引号、反斜杠等JSON特殊字符,生成的内容会直接解析失败
  • 不要在循环里给最后一个元素后面加逗号,部分严格的JSON解析器会直接抛出语法错误

内容的提问来源于stack exchange,提问作者netv

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 00:39:18