自定义对象的JSON序列化(编码和解码)

时间:2017-09-19 13:53:20

标签: python json serialization

我一直在网上搜索,但在python中找不到使用JSON编码和解码自定义对象的简单示例。

假设我有以下课程:

class Test:
    def __init__(self, name=None, grade=None):
        self.name = name
        self.grade = grade

并且还有一个Test对象列表:

t1 = Test("course1", 80)
t2 = Test("course2", 90)

list_of_tests = [t1, t2]
  

如何序列化类Test和对象list_of_tests   使用JSON?我希望能够将它写入文件并使用python从文件中读取。

2 个答案:

答案 0 :(得分:0)

您可以控制转储序列化无法识别的对象的方式(默认值= converter_function)。为了使它成为有效的JSON,你必须返回一个包含你想要的字段的简单字典,还有一些标记字段,用于标识它将被加载专门处理。

然后有另一个转换器函数来反转传递给loads()的进程as object_hook。

答案 1 :(得分:0)

老实说,最简单的方法是从对象手动创建字典列表。然后你可以直接将它传递给JSON函数。

data = [{'name': x.name, 'grade': x.grade} for x in list_of_tests]
with open('output.json', 'w') as out:
    json.dump(data, out)

并回读:

with open('output.json') as inp:
    data = json.load(inp)
    list_of_tests = [Test(x['name'], x['grade']) for x in data]