码迷,mamicode.com
首页 > 编程语言 > 详细

Python序列化之json与pickle

时间:2016-08-18 00:41:11      阅读:237      评论:0      收藏:0      [点我收藏+]

标签:

1、json介绍

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。 易于人阅读和编写。同时也易于机器解析和生成。 它基于JavaScript Programming LanguageStandard ECMA-262 3rd Edition - December 1999的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。 这些特性使JSON成为理想的数据交换语言。

Python3 中可以使用 json 模块来对 JSON 数据进行编解码,它包含了两个函数:

  1. json.dumps():对数据进行编码
  2. json.loads():对数据进行解码

json.dumps与json.loads实例

以下实例演示了 Python 数据结构转换为JSON

1 #!/usr/bin/env python
2 # _*_ coding:utf-8 _*_
3 # Author: enzhi.wang
4 import json
5 # 将python的基础数据类型转化成字符串
6 dic = {"k1":"v1","k2":"v2"}
7 print("Python原始数据:",repr(dic),type(dic))
8 result = json.dumps(dic)    #将字典类型转换为字符串类型
9 print("JSON对象:",result,type(result))

 

执行以上代码输出结果为:

C:\Python3.5\python.exe C:/Users/root/PycharmProjects/S14/day4/json序列化.py
Python原始数据: {k1: v1, k2: v2} <class dict>
JSON对象: {"k1": "v1", "k2": "v2"} <class str>

通过输出的结果可以看出,简单类型通过编码后跟其原始的repr()输出结果非常相似。

接着以上实例,我们可以将一个JSON编码的字符串转换回一个Python数据结构:

 1 #!/usr/bin/env python
 2 # _*_ coding:utf-8 _*_
 3 # Author: enzhi.wang
 4 import json
 5 # 将python的基础数据类型转化成字符串
 6 dic = {"k1":"v1","k2":"v2"}
 7 print("Python原始数据:",repr(dic),type(dic))
 8 result = json.dumps(dic)    #将字典类型转换为字符串类型
 9 print("JSON对象:",result,type(result))
10 
11 # 将python字符串类型转化为python基本数据类型
12 result = json.loads(result)
13 print("result[‘k1‘]:",result[k1])
14 print("result[‘k2‘]:",result[k2])

 

执行以上代码输出结果为:

C:\Python3.5\python.exe C:/Users/root/PycharmProjects/S14/day4/json序列化.py
Python原始数据: {k1: v1, k2: v2} <class dict>
JSON对象: {"k1": "v1", "k2": "v2"} <class str>
result[k1]: v1
result[k2]: v2

如果你要处理的是文件而不是字符串,你可以使用 json.dump() 和 json.load() 来编码和解码JSON数据。例如:

 1 data = {
 2     "name":"wangenzhi",
 3     "age":25,
 4     "job":"ops"
 5 }
 6 # 写入json数据
 7 with open(db.json,w) as f:
 8     json.dump(data,f)
 9 
10 # 读取json数据
11 with open(db.json,r) as f:
12     res = json.load(f)
13     print(res,type(res))

更多资料请参考:https://docs.python.org/3/library/json.html

2、pickle介绍

pickle模块使用的数据格式是python专用的,并且不同版本不向后兼容,同时也不能被其他语言说识别。要和其他语言交互,可以使用内置的json 包使用pickle模块你可以把Python对象直接保存到文件,而不需要把他们转化为字符串,也不用底层的文件访问操作把它们写入到一个二进制文件里。 pickle模块会创建一个python语言专用的二进制格式,你基本上不用考虑任何文件细节,它会帮你干净利落地完成读写独享操作,唯一需要的只是一个合法的文件句柄。

python3中可以使用pickle模块,对数据进行编解码。它包含两个函数:

  1. pickle.dumps()
  2. pickle.loads()

pickle.dumps与pickle.loads实例

 1 #!/usr/bin/env python
 2 # _*_ coding:utf-8 _*_
 3 # Author: enzhi.wang
 4 import pickle
 5 
 6 data = {
 7     "name":"wangenzhi",
 8     "age":25,
 9     "job":"ops"
10 }
11 
12 print("原始python对象:",repr(data))
13 r = pickle.dumps(data)
14 print("pickle转换后的对象:",r)
15 res = pickle.loads(r)
16 print("res[‘name‘]:",res[name])
17 print("res[‘age‘]:",res[age])
18 print("res[‘job‘]:",res[job])

执行以上代码输出结果为:

C:\Python3.5\python.exe C:/Users/root/PycharmProjects/S14/day4/pickle序列化.py
原始python对象: {name: wangenzhi, job: ops, age: 25}
pickle转换后的对象: b\x80\x03}q\x00(X\x04\x00\x00\x00nameq\x01X\t\x00\x00\x00wangenzhiq\x02X\x03\x00\x00\x00jobq\x03X\x03\x00\x00\x00opsq\x04X\x03\x00\x00\x00ageq\x05K\x19u.
res[name]: wangenzhi
res[age]: 25
res[job]: ops

如果你要处理的是文件而不是字符串,你可以使用 pickle.dump() 和 pickle.load() 来编码和解码JSON数据。例如:

 1 import pickle
 2 
 3 data = {
 4     "name":"wangenzhi",
 5     "age":25,
 6     "job":"ops"
 7 }
 8 # 写入数据,要以wb格式写入
 9 pickle.dump(data,open(db,wb))
10 # 读取数据,要以rb格式读取
11 f = open(db,rb)
12 res = pickle.load(f)
13 print(res)

执行以上代码输出结果为:

C:\Python3.5\python.exe C:/Users/root/PycharmProjects/S14/day4/pickle序列化.py
{job: ops, name: wangenzhi, age: 25}

小结

JSON:适合跨语言,对于python而言仅适用于Python基本数据类型

pickle:仅适用于python,pickle适用于python所有数据类型的序列化

Python序列化之json与pickle

标签:

原文地址:http://www.cnblogs.com/ITOps/p/5782184.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!