Flask-RESTful+Marshmallow返回日文Unicode转字符问题
解决Flask-RESTful + Marshmallow日文Unicode转义问题
你遇到的问题核心是Flask-RESTful默认的响应序列化没有沿用Flask原生的JSON配置,导致app.config['JSON_AS_ASCII']=False不生效,日文被转义为Unicode编码。以下是几种适配Marshmallow的解决办法:
方法一:用Flask的jsonify包装dump结果
直接用jsonify包裹Marshmallow的dump输出,让Flask的JSON处理器接管,自然会遵循JSON_AS_ASCII=False的设置。修改你的API类代码:
from flask import jsonify class PrefectureApi(Resource): def get(self): schema = PrefectureSchema(many=True) values = Prefecture.query.all() result = schema.dump(values) return jsonify(result)
方法二:手动控制Marshmallow dump的JSON转义
通过json.dumps直接生成不带Unicode转义的JSON字符串,同时指定响应头确保编码正确:
import json class PrefectureApi(Resource): def get(self): schema = PrefectureSchema(many=True) values = Prefecture.query.all() result = schema.dump(values) json_str = json.dumps(result, ensure_ascii=False) return json_str, 200, {'Content-Type': 'application/json; charset=utf-8'}
方法三:全局配置Flask-RESTful的JSON编码器
一次性修改所有API的JSON处理逻辑,让它遵循Flask的JSON配置:
from flask_restful import Api from flask import json api = Api(app) # 重写默认的JSON表示器 api.representation('application/json')(lambda data, code, headers: (json.dumps(data, ensure_ascii=False), code, headers))
另外注意你代码中的语法错误:return {schema.dump(values)缺少闭合的},实际开发中直接返回schema.dump(values)的结果即可,不需要额外用字典包裹。
内容的提问来源于stack exchange,提问作者user8183395
相关产品推荐
相关产品推荐

