要让 Flask 中使用 jsonify
返回的 JSON串支持中文显示,需要进行如下设置:
- 引入
json_dumps_settings
模块,该模块可以设置序列化 JSON 数据时的一些选项。例如:ensure_ascii
参数可以指示是否对非 ASCII 字符进行转义。默认值是True
,即默认情况下会将非 ASCII 字符转义为 Unicode 对象。
from flask import Flask, jsonify
from flask.json import JSONEncoder
import json
app = Flask(__name__)
# 定义 JSONEncoder,并继承 Flask 内置的 JSONEncoder
class CustomJSONEncoder(JSONEncoder):
def default(self, obj):
from bson import ObjectId
import datetime
if isinstance(obj, ObjectId):
return str(obj)
if isinstance(obj, datetime.datetime):
return obj.strftime('%Y-%m-%d %H:%M:%S')
return super(JSONEncoder, self).default(obj)
# 修改 jsonify 函数的默认参数
@app.after_request
def after_request(response):
if response.content_type == 'application/json':
response.data = json.dumps(json.loads(response.data.decode('utf-8')), ensure_ascii=False)
response.content_type = 'application/json;charset=utf-8'
return response
@app.route('/')
def index():
data = {'name': 'John Doe', 'age': 42, 'message': '你好'}
return jsonify(data)
- 在 Flask 中设置
JSONEncoder
编码方式并返回对象,通过设置json_encoder
参数来传递自己自定义的JSONEncoder
对象实例,并在其default
函数中对需要处理的属性进行处理,来解决中文返回乱码的问题。例如:
from flask import Flask, jsonify
from flask.json import JSONEncoder
import json
app = Flask(__name__)
class CustomJSONEncoder(JSONEncoder):
def default(self, obj):
from bson import ObjectId
import datetime
if isinstance(obj, ObjectId):
return str(obj)
if isinstance(obj, datetime.datetime):
return obj.strftime('%Y-%m-%d %H:%M:%S')
return super(JSONEncoder, self).default(obj)
# 指定 Flask 使用自定义的 JSONEncoder 序列化 JSON 对象
app.json_encoder = CustomJSONEncoder()
@app.route('/')
def index():
data = {'name': 'John Doe', 'age': 42, 'message': '你好'}
return jsonify(data)
在这两个示例中,我们使用了两种方法来解决中文返回乱码的问题。第一种方法是通过 Flask 的 after_request
钩子函数来设置 jsonify
返回的 JSON 数据的编码方式,第二种方法是在 Flask 中设置 JSONEncoder
编码方式并返回对象。具体哪种方法更适合你的应用取决于你的使用场景和需求。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Flask 让jsonify返回的json串支持中文显示的方法 - Python技术站