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

Jinja2渲染含混合引号的JSON值后解析报错如何解决?

问题根因

你遇到的报错本质是Jinja2默认输出Python字典对象时,使用的是Python原生的字符串表示格式,字典键用单引号包裹,转义逻辑也是Python语法规范,不符合JSON/YAML的语法要求,当字符串值同时包含单双引号时就会出现解析失败的问题。

修复方案

场景1:需要输出可被JSON解析的内容

直接使用Jinja2内置的tojson过滤器,会自动将Python对象序列化为标准JSON格式字符串,自动处理引号转义、双引号键的要求。
修复后代码示例:

import json
from jinja2 import Environment

j = json.loads('{"k": "\\"v1\\"=\'v2\'"}')
# 模板中添加tojson过滤器
t = Environment().from_string('{{ d | tojson }}')
r = t.render({'d': j})
# 此时r为标准JSON字符串,可直接解析
y = json.loads(r)

如果需要格式化输出,可传缩进参数:{{ d | tojson(indent=2) }}。

场景2:需要输出可被YAML解析的内容

给Jinja2自定义一个toyaml过滤器,调用YAML序列化方法生成标准YAML格式字符串。
修复后代码示例:

import yaml
from jinja2 import Environment

# 自定义YAML序列化过滤器
def toyaml(data):
    return yaml.safe_dump(data)

env = Environment()
env.filters['toyaml'] = toyaml

j = yaml.safe_load('{"k": "\\"v1\\"=\'v2\'"}')
t = env.from_string('{{ d | toyaml }}')
r = t.render({'d': j})
# 此时r为标准YAML字符串,可直接解析
y = yaml.safe_load(r)

注意事项

不要直接将Python原生对象输出到需要后续结构化解析的文本位置,必须先通过对应格式的序列化方法转换为标准格式字符串,避免Python特有的语法规则导致解析失败。

内容的提问来源于stack exchange,提问作者Nelson G.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 02:15:07