当前位置: 首页 > 知识库问答 >
问题:

将类实例序列化到JSON

戈嘉慕
2023-03-14
class testclass:
    value1 = "a"
    value2 = "b"
t = testclass()
json.dumps(t)
TypeError: <__main__.testclass object at 0x000000000227A400> is not JSON serializable
t = testclass()
print(pickle.dumps(t, pickle.HIGHEST_PROTOCOL))

它提供类实例信息,但不提供类实例的序列化内容。

b'\x80\x03c__main__\ntestclass\nq\x00)\x81q\x01}q\x02b.'

我做错了什么?

共有1个答案

齐坚成
2023-03-14

基本问题是JSON编码器JSON.dumps()默认情况下只知道如何序列化有限的一组对象类型,即所有内置类型。这里的列表:https://docs.python.org/3.3/library/json.html#encoders-and-decoders

一个很好的解决方案是让您的类继承Jsonencoder,然后实现Jsonencoder.default()函数,并使该函数为您的类发出正确的JSON。

一个简单的解决方案是对该实例的.__dict__成员调用json.dumps()。这是一个标准的Pythondict,如果您的类很简单,那么它将是JSON可序列化的。

class Foo(object):
    def __init__(self):
        self.x = 1
        self.y = 2

foo = Foo()
s = json.dumps(foo) # raises TypeError with "is not JSON serializable"

s = json.dumps(foo.__dict__) # s set to: {"x":1, "y":2}
s = json.dumps(vars(foo)) # s set to: {"x":1, "y":2}
 类似资料:
  • 问题内容: 我正在尝试创建类实例的JSON字符串表示形式并且遇到困难。假设该类的构建如下: 像这样对json.dumps进行调用: 失败了,并告诉我testclass不可JSON序列化。 我也尝试过使用pickle模块: 它提供类实例信息,但不提供类实例的序列化内容。 我究竟做错了什么? 问题答案: 基本问题是,JSON编码器仅知道默认情况下如何序列化一组有限的对象类型(所有内置类型)。在此处列出

  • 我有一个通过RabbitMQ作为消息发送的类,在sender服务上,它的定义如下: 并且在接收方服务上: 在receiver controller中,我有以下方法,它应该接受该消息,将其转换为一个对象,并将其保存在数据库中,看起来如下所示: 编辑:根据请求添加堆栈跟踪。

  • 本文向大家介绍.net的序列化与反序列化实例,包括了.net的序列化与反序列化实例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了.net的序列化与反序列化的实现方法。分享给大家供大家参考。具体方法如下: 1.序列化与反序列化概述 C#中如果需要:将一个结构很复杂的类的对象存储起来,或者通过网路传输到远程的客户端程序中去,这时就需要用到序列化,反序列化(Serialization & De

  • 本文向大家介绍C#实现的json序列化和反序列化代码实例,包括了C#实现的json序列化和反序列化代码实例的使用技巧和注意事项,需要的朋友参考一下

  • 本文向大家介绍.net实现序列化与反序列化实例解析,包括了.net实现序列化与反序列化实例解析的使用技巧和注意事项,需要的朋友参考一下 序列化与反序列化是.net程序设计中常见的应用,本文即以实例展示了.net实现序列化与反序列化的方法。具体如下: 一般来说,.net中的序列化其实就是将一个对象的所有相关的数据保存为一个二进制文件(注意:是一个对象) 而且与这个对象相关的所有类型都必须是可序列化的