TypeError: 类型为‘ float32’的对象不是可序列化的 JSON

我使用的是 numpy.float32数字,它们不会进入 JSON。克服这个问题的正确方法是什么?

import numpy as np
import json


a = np.float32(1)
json.dumps(a)


TypeError: Object of type 'float32' is not JSON serializable
94248 次浏览

它必须是一个字符串,所以你可以:

json.dumps(str(a))

编辑:

JSON 是一种序列化对象数据的格式。它并不真正关心或了解 Python 类型,json 包试图通过仅支持某些类型的 conversion table将传递给 json.dumps()的任何对象转换为字符串形式(参见下面的 doc)。

这就是为什么我认为最好只传递一个字符串来避免这个问题: numpy.float32不在表中。

因为有些人评论说,显式地将字符串传递给 dumps“听起来是错误的”,我将在这里添加文档

Dump (obj,* ,skipkeys = False,sure _ ascii = True, 允许 _ nan = 真,cls = 无,缩进 = 无, 将 obj 序列化为 一个 JSON 格式的 str,使用这个转换表 与 dump ()中的含义相同。

注意 JSON 的键/值对中的键总是 str. When 类型 一个字典被转换成 JSON,字典的所有键 被强制使用字符串。因此,如果字典是 转换成 JSON,然后再转换成字典,即字典 可能不等于原来的一个。也就是说,加载(转储(x)) ! = x,如果 x 有 非字符串键。

取自官方文件: https://docs.python.org/3/library/json.html