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

Flask接口返回JSON字符串而非JSON响应的解决方法

Flask返回JSON出现转义引号的解决方案

常见错误原因

  • 重复序列化:先使用json.dumps()把Python对象转成JSON字符串,再传给jsonify(),此时jsonify()会把这个字符串当作普通字符串再次序列化,导致外层出现引号且内部字符被转义。
  • 直接返回JSON字符串但未设置正确的Content-Type:仅返回json.dumps()生成的字符串,Flask默认会把它当成普通文本响应,客户端会显示带引号的转义字符串。

解决方案

方案1:直接用jsonify()处理Python原生数据结构

jsonify()会自动完成序列化,并设置正确的Content-Type: application/json响应头,这是Flask推荐的方式:

from flask import Flask, jsonify

app = Flask(__name__)

@app.route('/api/your-endpoint')
def your_api():
    # 定义原生Python字典/列表数据
    response_data = {
        "status": "success",
        "data": {"name": "test", "values": [1, 2, 3]}
    }
    # 直接传入数据结构给jsonify
    return jsonify(response_data)

方案2:手动序列化后用Response返回

如果必须手动用json.dumps()序列化,不要用jsonify(),而是用flask.Response返回并指定MIME类型:

import json
from flask import Flask, Response

app = Flask(__name__)

@app.route('/api/your-endpoint')
def your_api():
    response_data = {
        "status": "success",
        "data": {"name": "test", "values": [1, 2, 3]}
    }
    json_str = json.dumps(response_data)
    # 指定mimetype为application/json
    return Response(json_str, mimetype='application/json')

方案3:避免嵌套序列化的错误写法

不要把已经序列化的JSON字符串再放到字典里传给jsonify(),比如以下错误写法:

# 错误示例:重复序列化
json_str = json.dumps(response_data)
return jsonify({"result": json_str})  # 会导致json_str被再次转义

改成直接传入原生数据结构:

# 正确写法
return jsonify({"result": response_data})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 17:25:14