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 'float'>
type(np.float64(0).item()) # <type 'float'>
type(np.uint32(0).item())  # <type 'long'>
# examples using np.asscalar(a)
type(np.asscalar(np.int16(0)))   # <type 'int'>
type(np.asscalar(np.cfloat(0)))  # <type 'complex'>
type(np.asscalar(np.datetime64(0)))  # <type 'datetime.datetime'>
type(np.asscalar(np.timedelta64(0))) # <type 'datetime.timedelta'>

问题二

上面问题涉及的是一个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)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。