如何使用 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"}}}
我在 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"}}}