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

Flask从Python2升级到Python3时jsonify处理字典报bytes不可序列化问题

报错原因

Python2 中str和bytes类型等价,JSON序列化时不会有类型冲突;Python3 中二者完全拆分,JSON标准仅支持Unicode字符串类型,不支持二进制bytes类型,你的data字典的键或值中存在bytes类型数据,导致序列化失败。

解决方案

方案1:全局配置Flask JSON序列化规则(代码改动最小)

无需修改现有接口返回逻辑,仅需要在Flask应用初始化位置新增自定义序列化规则,全局适配bytes类型转字符串:

from flask import Flask, json

app = Flask(__name__)

# 新增以下代码即可
def custom_json_serializer(obj):
    if isinstance(obj, bytes):
        # 按你实际编码调整,绝大多数场景为utf-8
        return obj.decode('utf-8')
    raise TypeError(f"Object of type {type(obj)} is not JSON serializable")

app.json.default = custom_json_serializer

方案2:单独转换目标data字典

如果不想修改全局配置,仅需要新增一个递归转换函数,修改你现有返回代码的1行即可:

# 新增转换函数
def bytes_to_str(obj):
    if isinstance(obj, bytes):
        return obj.decode('utf-8')
    if isinstance(obj, dict):
        return {bytes_to_str(k): bytes_to_str(v) for k, v in obj.items()}
    if isinstance(obj, (list, tuple)):
        return type(obj)(bytes_to_str(i) for i in obj)
    return obj

# 你原有代码仅修改result赋值的一行
message = {
    'success': True,
    'result': bytes_to_str(data)
}
resp = jsonify(message)
resp.status_code = 200
return resp

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 04:54:03