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
相关产品推荐
相关产品推荐

