Quart/Flask通过render_template返回紧凑格式JSON的方法问询
解决方案
核心思路是不手动处理空白字符,通过「反序列化模板渲染结果+重新序列化」的方式生成符合要求的紧凑JSON,同时复用Quart内置能力自动设置响应头。
错误原因说明
- 你当前的手动替换空白方案会无差别删除所有空白字符,会把JSON值内的合法空格一并移除,不符合预期。
- 直接把
render_template返回的字符串传给jsonify的用法有误:jsonify会将传入的字符串当做单个JSON值序列化,最终返回的结果会在整个字符串外层多套一层引号,无法输出你要的JSON结构。
正确实现代码
import json from quart import jsonify, render_template # 路由示例 @app.route("/get-json") async def get_json(): # 1. 正常渲染模板,得到Jinja替换后的带格式JSON字符串 rendered_json_str = await render_template("example.json", keyword_arg2="你要传入的参数") # 2. 反序列化为Python原生数据结构,自动过滤JSON语法层面的空白,保留值内空格 json_data = json.loads(rendered_json_str) # 3. 用jsonify序列化返回,自动设置Content-Type为application/json,输出紧凑格式 return await jsonify(json_data)
如果需要强制关闭美化输出(无论是否开启调试模式都输出紧凑JSON),可以在应用配置中添加:
app.config["JSONIFY_PRETTYPRINT_REGULAR"] = False
方案优势
- 完全符合JSON规范,不会破坏JSON值内的空格、特殊字符等内容
- 复用Quart内置的
jsonify能力,无需手动设置响应头 - 自带JSON合法性校验,模板渲染出非法JSON时会直接抛出异常,便于排查问题
内容的提问来源于stack exchange,提问作者Rusty Lemur
相关产品推荐
相关产品推荐

