解决TypeError: Object of type xxx is not JSON serializable错误问题

 更新时间:2023年06月25日 14:13:25   作者:zaf赵  
这篇文章主要介绍了解决TypeError: Object of type xxx is not JSON serializable错误问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

TypeError: Object of type xxx is not JSON serializable

问题描述

在导入Python json包,调用json.dump/dumps函数时,可能会遇到TypeError: Object of type xxx is not JSON serializable错误,也就是无法序列化某些对象格式。

解决办法

默认的编码函数很多数据类型都不能编码,自定义序列化,因此可以自己写一个Myencoder去继承json.JSONEncoder

具体如下:

class MyEncoder(json.JSONEncoder):
    def default(self, obj):
        if isinstance(obj, np.integer):
            return int(obj)
        elif isinstance(obj, np.floating):
            return float(obj)
        elif isinstance(obj, np.ndarray):
            return obj.tolist()
        else:
            return super(MyEncoder, self).default(obj)

然后在调用json.dump/dumps时,指定使用自定义序列化方法

json.dumps(data, cls=MyEncoder) 

dict to json

def dict_to_json(dict_obj,name, Mycls = None):
    js_obj = json.dumps(dict_obj, cls = Mycls, indent=4)
    with open(name, 'w') as file_obj:
        file_obj.write(js_obj)

json to dict

def json_to_dict(filepath, Mycls = None):
    with open(filepath,'r') as js_obj:
        dict_obj = json.load(js_obj, cls = Mycls)
    return dict_obj

TypeError: Object of type ‘int64’ is not JSON serializable (或者float32)

在使用json格式保存数据时,经常会遇到xxx is not JSON serializable,也就是无法序列化某些对象格式,我所遇见的是我使用了numpy时,使用了np的数据格式,写入data后,json.dumps(data)失败,我们可以自己定定义对特定类型的对象的序列化

下面看下怎么定义和使用关于np数据类型的自定义。

1.首先,继承json.JSONEncoder,自定义序列化方法。

class NpEncoder(json.JSONEncoder):
def default(self, obj):
if isinstance(obj, np.integer):
return int(obj)
elif isinstance(obj, np.floating):
return float(obj)
elif isinstance(obj, np.ndarray):
return obj.tolist()
else:
return super(NpEncoder, self).default(obj)

2.使用dumps方法(我们可以直接把dict直接序列化为json对象)加上 cls=NpEncoder,data就可以正常序列化了

json.dumps(data, cls=NpEncoder)

其实,很简单,自定义一个序列化方法,然后dumps的时候加上cls=NpEncoder

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 上帝为你开了一扇窗之Tkinter常用函数详解

    上帝为你开了一扇窗之Tkinter常用函数详解

    构思了很长一段时间,总感觉不够有趣,于是打算出一个完整的系列,让大家一起感受python的乐趣.这个系列着重以系统库中的tkinter为中心来围绕进行编写.因此我们的第一步是导入模块, 第一节就来为大家建立一个窗口 ,需要的朋友可以参考下
    2021-06-06
  • python 文件读写操作示例源码解读

    python 文件读写操作示例源码解读

    这篇文章主要为大家介绍了python 文件读写操作示例源码解读,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03
  • 教你用Type Hint提高Python程序开发效率

    教你用Type Hint提高Python程序开发效率

    本文通过介绍和实例教大家如何利用Type Hint来提升Python程序开发效率,对大家使用python开发很有帮助,有需要的参考学习。
    2016-08-08
  • Python类的定义和使用详情

    Python类的定义和使用详情

    这篇文章主要介绍了Python类的定义和使用详情,在Python中,类表示具有相同属性和方法的对象的集合,文章围绕主题相关资料展开更多的相关介绍,需要的小伙伴可以参考一下
    2022-06-06
  • Python range() 函数用法详解

    Python range() 函数用法详解

    range()是python内置函数它能返回一系列连续增加的整数,它的工作方式类似于分片,可以生成一个列表对象,这篇文章主要介绍了Python range() 函数用法,需要的朋友可以参考下
    2023-03-03
  • 使用 Python 实现微信公众号粉丝迁移流程

    使用 Python 实现微信公众号粉丝迁移流程

    近日,因公司业务需要,需将原两个公众号合并为一个,即要将其中一个公众号(主要是粉丝)迁移到另一个公众号。这篇文章主要介绍了使用 Python 实现微信公众号粉丝迁移,需要的朋友可以参考下
    2018-01-01
  • Pandas 中的 drop_duplicates()详解

    Pandas 中的 drop_duplicates()详解

    Pandas 中的 drop_duplicates() 函数用于从 DataFrame 中删除重复的行,该函数有一些参数,允许你进行不同方式的重复行处理,本文给大家介绍Pandas 中的 drop_duplicates(),感兴趣的朋友跟随小编一起看看吧
    2023-09-09
  • Python turtle库绘制菱形的3种方式小结

    Python turtle库绘制菱形的3种方式小结

    今天小编就为大家分享一篇Python turtle库绘制菱形的3种方式小结,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-11-11
  • Python调用win10toast框架实现定时调起系统通知

    Python调用win10toast框架实现定时调起系统通知

    win10toast是一个windows通知的出发框架,使用它可以轻松的调起系统通知。通过它可以很方便的做一个定时通知的功能应用。本文将调用win10toast实现定时调起系统通知功能,需要的可以参考一下
    2022-01-01
  • 详解基于python的全局与局部序列比对的实现(DNA)

    详解基于python的全局与局部序列比对的实现(DNA)

    这篇文章主要介绍了详解基于python的全局与局部序列比对的实现(DNA).文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-10-10

最新评论