json写入问题:TypeError: Object of type float32 is not JSON serializable

问题描述

在将一个字典数据写入json文件时,遇到标题错误

问题分析

打印错误数据的数据类型type(),发现数据的类型为numpy.float32,python的内置类型float可以写入json,然而numpy类型的float不能写入json,所以应将numpy.float32转换成python内置的数据类型float

  • 附:numpy.array同样不能写入json文件,需要将numpy.array转换成list,例如a.tolist()

问题解决

使用a.item()或np.asscalar(a)将NumPy值转换为本机Python类型

import numpy as np
# examples using a.item()
type(np.float32(0).item()) # 
type(np.float64(0).item()) # 
type(np.uint32(0).item())  # 
# examples using np.asscalar(a)
type(np.asscalar(np.int16(0)))   # 
type(np.asscalar(np.cfloat(0)))  # 
type(np.asscalar(np.datetime64(0)))  # 
type(np.asscalar(np.timedelta64(0))) # 

问题二

上面问题涉及的是一个numpy值,将其转换成python内置类型即可,然而又遇到一个新问题,一个list,里面的每个元素都是numpy.int32类型,将其写入json报错:TypeError: Object of type int32 is not JSON serializable

问题分析

受问题一的启发,我将list中的每个元素都用item函数转换成python的内置类型,然而依旧报错:TypeError: Object of type int32 is not JSON serializable

问题解决

先将list转换成numpy.array,在将numpy.array转换成list

import numpy as np
import json
b=np.array(a).tolist()
json_str=json.dumps(b)

你可能感兴趣的:(json写入问题:TypeError: Object of type float32 is not JSON serializable)