如何使用 python 中的 json 转储包含用户定义的 class 作为值的字典?

How to dump a dictionary that contains user defined class as values using json in python?

我在 python 中有一个字典 signature2GroupLength2UserDefinedClassDict。 第一级键是字符串。 二级键是整数,值是用户定义的类型 class。 如何使用 python 中的 json 转储并稍后阅读这本词典?

虽然我定义用户定义class如下:

#########################################################################
class UserDefinedClass(JSONEncoder):
    def default(self, o):
        return o.__dict__

    def __init__(self, field1, field2, field3):
        self.field1 = field1
        self.field2 = field2
        self.field3 = field3
#########################################################################

我仍然得到

TypeError: Object of type 'UserDefinedClass' is not JSON serializable

当我打电话时

print(json.dumps(signature2Length2ProbDict))

由于特定的 JSONEncoder.__init__ 签名和
json.dumps 签名(需要使用关键字 cls= 参数传递才能使用自定义 JSONEncoder subclass)您不应将自定义用户 class 和自定义 JSON 编码器。
让他们 work/live 分开:

import json
from json import JSONEncoder

class UserDefinedClass: 
    def __init__(self, field1, field2, field3):
        self.field1 = field1
        self.field2 = field2
        self.field3 = field3

class CustomEncoder(JSONEncoder):
    def default(self, o):
        return o.__dict__    


signature2Length2ProbDict = {'a': {1: UserDefinedClass(*['one', 'two', 'three'])},
                             'b': {2: UserDefinedClass(*['four', 'five', 'six'])}}

print(json.dumps(signature2Length2ProbDict, cls=CustomEncoder))

输出:

{"a": {"1": {"field1": "one", "field2": "two", "field3": "three"}}, "b": {"2": {"field1": "four", "field2": "five", "field3": "six"}}}