Python--序列化和反序列化

通过文件操作,可将字符串写入到一个本地文件,但是无法将一个对象,如字典,列表,元组直接写入到一个文件里,这是就需要将这个对象进行序列化,然后写入文件。

设计一套协议,按照某种规则,把内存中的数据转换为字节序列,保存到文件,这就是序列化,反之,从文件的字节序列恢复到内存中,就是反序列化。

序列化: 将对象转换为字节序列。

反序列化:将字节序列转换为对象。

JSON模块

Python中JSON模块可用来实现数据的序列化和反序列化。

JSON:Javascript Object Notation ,一种轻量级的数据交换标准。JSON的本质是字符串。

使用JSON实现序列化

JSON提供了dump和dumps方法,将一个对象序列化。把对象转换为字符串,方法本身不具备将数据写入到文件的功能。

dumps( ) 方法测试

测试代码:

import json

names = [‘Jack’, ‘Dennis’, ‘Ritchie’, ‘Mike’, ‘Tony’]

# dumps 传入一个对象,转换为一个JSON字符串

result = json.dumps(names)

print(result)

print(type(result)) #

with open(‘json.txt’, ‘w’) as f:

    f.write(result)

列表被写入到文件json.txt
Python--序列化和反序列化_第1张图片

dump() 方法测试

将对象转换为字符串的同时,指定一个文件对象,把转换后的字符串写入到这个文件

# dump

fp =open(‘json2.txt’, ‘w’)

json.dump(names, fp)

fp.close()

# 或者

with open(‘json3.txt’, ‘w’) as f:

json.dump(names, f)

实现了对象序列化的同时写入文件。

创建文件效果如下:

Python--序列化和反序列化_第2张图片

json2.txt和json3.txt写入了同样的内容。

JSON实现反序列化

将JSON的字符串变成一个Python对象

# 反序列化 loads( )方法

with open(‘json.txt’, ‘r’) as f:

    content = f.read()

    print(content)

    print(type(content))

输出:

[“Jack”, “Dennis”, “Ritchie”, “Mike”, “Tony”]

可以看到,读取输出的是字符串类型,并不是列表。

with open(‘json.txt’, ‘r’) as f:

    content = f.read()

    result = json.loads(content)

    print(type(result))

输出:

可以看出,使用loads( )方法后将字符串转变为列表对象了。

# load( )方法

测试代码:

with open(‘json.txt’) as f:

    result = json.load(f)

    print(result)

    print(type(result))

输出:

[‘Jack’, ‘Dennis’, ‘Ritchie’, ‘Mike’, ‘Tony’]

直接转换为列表对象了。

你可能感兴趣的:(Python,python,开发语言,序列化,反序列化,JSON)