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

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

方案优势

  1. 完全符合JSON规范,不会破坏JSON值内的空格、特殊字符等内容
  2. 复用Quart内置的jsonify能力,无需手动设置响应头
  3. 自带JSON合法性校验,模板渲染出非法JSON时会直接抛出异常,便于排查问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 17:18:05