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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 05:54:10