天天看点

python中的json和pickle

author:headsen chen

date::2018-04-10  09:56:54

json模块和pickle模块:

这是用于序列化的两个模块:

概念介绍:

json和pickle模块是将数据进行序列化处理,并进行网络传输或存入硬盘。

json: 用于字符串和python数据类型间进行转换(适用于python和其他语言之间进行类型转换)

pickle: 用于python特有的类型和python的数据类型间进行转换

json:模块提供了四个功能:dumps dump loads load

pickle:模块提供了四个功能:dumps dump loads load

使用方法:

使用前先导入该模块

import json

import pickle

总结区别:

pickcle和json的使用只有一点不一样:pickle使用的rb和wb模式,json使用的r和w模式,其余使用方法上一样的。

........................功能上:pickle用于python内部各种数据类型的转换,json用于python和其他语言之间的数据类型的转换和交换。

........................使用范围上:pickle可以序列化所有的数据类型包括类、函数,json只能序列化最基本的数据类型。

python2可以dump多次,load多次,2个次数都是一一对应的

python3只能dump多次,loads、load一次

自己试验的实例:

pickle  ==========================================================================

例1:pickle 内存对象的序列化(python3.0版本)

import pickle

d = {"k1":'123',"k2":'456'}

e = pickle.dumps(d)

print(e)

-----> 运行后生成了只有python才认识的特定的字符串

b'x80x03}qx00(Xx02x00x00x00k1qx01Xx03x00x00x00123qx02Xx02x00x00x00k2qx03Xx03x00x00x00456qx04u.'

例2:pickle序列化在python2.0版本里:

#[root@nginx1 python]# python

Python 2.7.5 (default, Nov 6 2016, 00:28:07)

>>> import pickle

>>> d ={"k1": '123', "k2": "hello"}

>>> p_str = pickle.dumps(d)

>>> print( p_str)

(dp0

S'k2'

p1

S'hello'

p2

sS'k1'

p3

S'123'

p4

s.

>>>

例3:将已经生成的序列化的e,进行反转(反序列化)

import pickle

d = {"k1":'123',"k2":'456'}

e = pickle.dumps(d)

f = pickle.loads(e)

print(f)

----->

{'k1': '123', 'k2': '456'}

例4:将序列化后的数据写入到文件中

import pickle

d ={"k1": '123', "k2": "hello"}

with open('ss','wb') as jp:

     pickle.dump(d,jp)

运行后自动生成序列化的ss文件:

打开ss文件:

�}q (X k1qX 123qX k2qX helloqu. (只有python才认识的某种类型文件)

将ss文件反转(反序列化操作)

例5:将上述ss文件进行反转(反序列化)

import pickle

with open('ss','rb') as jp: #同样读取的时候也需要打开文件

e=pickle.load(jp)

print(e)

---->

{'k1': '123', 'k2': 'hello'} -----------> 发现和上文的d一模一样

json ==================================================================================

json的序列化和反序列化:

例6:内存对象的序列化和反序列化:

import json

d = {"k1":'123',"k2":'456'}

e = json.dumps(d)

f = json.loads(e)

print(d,type(d))

print(e,type(e))

print(f,type(f))

 ------->

{'k1': '123', 'k2': '456'} <class 'dict'>

{"k1": "123", "k2": "456"} <class 'str'>

{'k1': '123', 'k2': '456'} <class 'dict'>

例7:文件的序列化和反序列化:

import json

d = {"k1":'123',"k2":'456'}

with open('kk','w') as jp:

    json.dump(d,jp)

运行后生成kk 的文件,文件内容:

{"k1": "123", "k2": "456"}

将生成的kk文件进行反序列化:

import json

with open('kk','r') as jp:        #同样读取的时候也需要打开文件

d=json.load(jp)

print(d,type(d))

------>

{'k1': '123', 'k2': '456'} <class 'dict'>

=======================================================================================================

例8:json模块总体的总结:

JSON在python中分别由list和dict组成。

import json

s={1:1,2:2,3:3}

sjson=json.dumps(s)     # 将s进行序列化

s1=json.loads(sjson)         # 将sjson进行反序列化

with open(filename,format)as f:

     json.dump(s,f)           # 将s进行序列化并存入文件中

with open(filename)as f:

     for line in f.readlines():

print(json.loads(line))        # 从文件读取并进行反序列化输出