python中json.dumps和json.loads的使用

今天学习到了python的序列化和反序列化,于是就试着写了一个例子,淡然我这里写的不是简单的把衣蛾dict转换成json字符串和json字符串反序列化成dict,我自己用了点时间写成功了class转json和json反序列化成class的一个demo,在这里记录一下并且和大家分享一下。

1. 第一步先建一个用于序列化的class,名字我取了叫Building.py
class Building(object):

    def __init__(self, name, unit, floors):
        self.name = name
        self.unit = unit
        self.floors = floors

这个类没什么特殊的,就定义了三个字段,第1个字段就是一个字符串,第2个字段其实是我定义的另外一个class,我是为了测试class嵌套的序列化效果,第3个字段是一个字符串数组,下面我把Unit.py贴出来

class Unit(object):

    def __init__(self, name):
        self.name = name

在Unit里就定义了一个字符串字段。

2. 第二步就是序列化的过程了

首先顶一个Building的实例

building = Building('来福士', Unit('number one'), ['1', '2', '3'])

下面去序列化这个building成json字符串

building_json = json.dumps(building, default=lambda obj: obj.__dict__)
print('Dump Student:', building_json)

这个代码执行结果如下:

Dump Student: {"name": "\u6765\u798f\u58eb", "unit": {"name": "number one"}, "floors": ["1", "2", "3"]}

通过结果看出来,最终成功将类序列化成json字符串,并且每个字段都包含在内。但往往序列化和反序列化是并存的,因为我们实际应用过程中是需要这样做,下面我们来说反序列化的过程。

3. 反序列化
building_obj = json.loads(building_json, object_hook=lambda d: namedtuple('X', d.keys())(*d.values()))
print(building_obj.unit.name)

ok,这样直接又将上边序列化的json String 反序列化成我们定义的Building class了,例子中只打印了unit里的name,这足以表明我们反序列化成功了。

0 0 vote
Article Rating
Subscribe
提醒
guest
1 评论
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
1
0
Would love your thoughts, please comment.x
()
x