序列化(Serialization)是将对象的状态信息转换为可以存储或传输的形式的过程。在序列化期间,对象将其当前状态写入带临时性或持久性存储区。之后,可以通过从存储区读取或者反序列化对象的状态,重建该对象。 序列化可以使其他代码可以查看或者修改,那些不序列化便无法访问的对象实例数据。
简单而言:
网络传输是一种常见的数据传输场景,在传输前,我们先将编程语言对象序列化为json/xml文件;在传输后,在将json/xml文件反序列化为对应语言的对象。
为什么要进行序列化?
特别指出一点,在不同语言之间的对象传递能进一步凸显序列化的重要,比如客户端使用Java或者OC,服务端使用Go/Python,这种场景下编程语言都不同,你把Java的HashMap传递给Python或者Go处理毫无意义,但可以序列化之后以字节流传输,再反序列化为Python的字典或者Go的结构体,这样同样的信息就能够在不同编程语言之间传递。
所以序列化能在不同编程语言,不同主机的进程之间传递对象。
有了以上背景知识之后我们再来看这个标题的问题。
json.load/loads
和json.dump/dumps
都来自json
包,它们都是用来处理json格式的数据,也即序列化和反序列化的。
具体的讲:
json.dump/dumps
函数将一个Python字典进行json格式的编码(即序列化,将Python字典转换成了json格式的字符串)
-json.load/loads
函数将一个json格式数据转换为字典(即反序列化,将json格式的字符串转换为Python字典)那英文单复数形式之间又有什么区别呢?
json.dump(json_object, file_object
),而将json文件中的数据读取为Python能直接处理的字典类型,则需要使用json.load(file_object)
。