我在python中有一个字典signature2GroupLength2UserDefinedClassDict。 一级键是字符串。 第二级键是整数,值是用户定义的类类型。 如何转储并稍后在python中使用json阅读此词典?
尽管我定义了用户定义的类,如下所示:
#########################################################################
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))
答案 0 :(得分:1)
由于特定的JSONEncoder.__init__
签名和
json.dumps
签名(需要使用关键字cls=
参数传递以使用自定义JSONEncoder
子类),您不应将自定义用户类和自定义JSON编码器结合使用。
让他们在单独的地方工作/生活:
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"}}}