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

Python2升级Python3后json.dumps提示0不可JSON序列化如何解决

问题原因

Python标准库的json模块仅支持序列化Python原生数据类型,无法识别Numpy定义的数值类型(如np.int32、np.float64等)。你日志中提到的0 is not JSON serializable里的0,本质是Numpy类型的标量值,并非Python原生int类型,所以触发了序列化报错。

解决方案

方案1:自定义json序列化编码器(通用且轻量)

新增一个Numpy类型转换函数,在调用json.dumps时通过default参数传入即可自动适配所有Numpy标量类型:

import json
import numpy as np

# 定义Numpy类型编码器
def numpy_encoder(obj):
    # 匹配所有Numpy标量类型,转为Python原生类型
    if isinstance(obj, np.generic):
        return obj.item()
    # 其他类型走默认序列化逻辑
    raise TypeError(f"Object of type {type(obj)} is not JSON serializable")

# 调用dumps时指定编码器
rec = json.dumps(rec, default=numpy_encoder)

该方案可以同时兼容你代码中label字段的Numpy整数类型,以及parse_rec返回的各个列表中可能残留的Numpy数值类型。

方案2:单独转换label字段(临时快速修复)

如果确认只有label字段是Numpy类型,可以直接在赋值时转换为Python原生int:

# 把取出的Numpy类型值转成Python原生int
label = int(out.loc[int(id_)])
rec = {'label': label}

方案3:使用Pandas内置的json序列化工具

如果你项目中已经引入了Pandas,可以直接用Pandas自带的序列化工具,天然支持Numpy类型:

import pandas as pd

rec = pd.io.json.dumps(rec)
补充说明

你之前尝试的.decode('utf-8')是用于bytes类型转字符串的方法,本次报错是数据类型不兼容导致,和编码无关,因此该方法无效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 17:06:01