Python序列化之json与pickle
1、json介绍
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。 易于人阅读和编写。同时也易于机器解析和生成。 它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。 这些特性使JSON成为理想的数据交换语言。
Python3 中可以使用 json 模块来对 JSON 数据进行编解码,它包含了两个函数:
- json.dumps():对数据进行编码
- json.loads():对数据进行解码
json.dumps与json.loads实例
以下实例演示了 Python 数据结构转换为JSON
#!/usr/bin/env python
# _*_ coding:utf-8 _*_
# Author: enzhi.wang
import json
# 将python的基础数据类型转化成字符串
dic = {"k1":"v1","k2":"v2"}
print("Python原始数据:",repr(dic),type(dic))
result = json.dumps(dic) #将字典类型转换为字符串类型
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数据结构:
#!/usr/bin/env python
# _*_ coding:utf-8 _*_
# Author: enzhi.wang
import json
# 将python的基础数据类型转化成字符串
dic = {"k1":"v1","k2":"v2"}
print("Python原始数据:",repr(dic),type(dic))
result = json.dumps(dic) #将字典类型转换为字符串类型
print("JSON对象:",result,type(result))
# 将python字符串类型转化为python基本数据类型
result = json.loads(result)
print("result['k1']:",result['k1'])
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数据。例如:
data = {
"name":"wangenzhi",
"age":25,
"job":"ops"
}
# 写入json数据
with open('db.json','w') as f:
json.dump(data,f)
# 读取json数据
with open('db.json','r') as f:
res = json.load(f)
print(res,type(res))
更多资料请参考:https://docs.python.org/3/library/json.html
2、pickle介绍
pickle模块使用的数据格式是python专用的,并且不同版本不向后兼容,同时也不能被其他语言说识别。要和其他语言交互,可以使用内置的json 包使用pickle模块你可以把Python对象直接保存到文件,而不需要把他们转化为字符串,也不用底层的文件访问操作把它们写入到一个二进制文件里。 pickle模块会创建一个python语言专用的二进制格式,你基本上不用考虑任何文件细节,它会帮你干净利落地完成读写独享操作,唯一需要的只是一个合法的文件句柄。
python3中可以使用pickle模块,对数据进行编解码。它包含两个函数:
- pickle.dumps()
- pickle.loads()
pickle.dumps与pickle.loads实例
#!/usr/bin/env python
# _*_ coding:utf-8 _*_
# Author: enzhi.wang
import pickle
data = {
"name":"wangenzhi",
"age":25,
"job":"ops"
}
print("原始python对象:",repr(data))
r = pickle.dumps(data)
print("pickle转换后的对象:",r)
res = pickle.loads(r)
print("res['name']:",res['name'])
print("res['age']:",res['age'])
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数据。例如:
import pickle
data = {
"name":"wangenzhi",
"age":25,
"job":"ops"
}
# 写入数据,要以wb格式写入
pickle.dump(data,open('db','wb'))
# 读取数据,要以rb格式读取
f = open('db','rb')
res = pickle.load(f)
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的更多相关文章
- python序列化模块json和pickle
序列化相关 1. json 应用场景: json模块主要用于处理json格式的数据,可以将json格式的数据转化为python的字典,便于python处理,同时也可以将python的字典或列表等对象转 ...
- python 序列化之JSON和pickle详解
JSON模块 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于ECMAScript的一个子集. JSON采用完全独立于语言的文本格式,但是也使用了类 ...
- 【转】Python之数据序列化(json、pickle、shelve)
[转]Python之数据序列化(json.pickle.shelve) 本节内容 前言 json模块 pickle模块 shelve模块 总结 一.前言 1. 现实需求 每种编程语言都有各自的数据类型 ...
- Python序列化,json&pickle&shelve模块
1. 序列化说明 序列化可将非字符串的数据类型的数据进行存档,如字典.列表甚至是函数等等 反序列化,将通过序列化保存的文件内容反序列化即可得到数据原本的样子,可直接使用 2. Python中常用的序列 ...
- python序列化: json & pickle & shelve 模块
一.json & pickle & shelve 模块 json,用于字符串 和 python数据类型间进行转换pickle,用于python特有的类型 和 python的数据类型间进 ...
- Python之数据序列化(json、pickle、shelve)
本节内容 前言 json模块 pickle模块 shelve模块 总结 一.前言 1. 现实需求 每种编程语言都有各自的数据类型,其中面向对象的编程语言还允许开发者自定义数据类型(如:自定义类),Py ...
- python 数据序列化(json、pickle、shelve)
本来要查一下json系列化自定义对象的一个问题,然后发现这篇博客(https://www.cnblogs.com/yyds/p/6563608.html)很全面,感谢作者,关于python序列化的知识 ...
- python常见模块之序列化(json与pickle以及shelve)
什么是序列化? 我们把对象(变量)从内存中变成可存储或传输的过程称之为序列化,在Python中叫pickling,在其他语言中也被称之为serialization,marshalling,flatte ...
- python序列化模块 json&&pickle&&shelve
#序列化模块 #what #什么叫序列化--将原本的字典.列表等内容转换成一个字符串的过程叫做序列化. #why #序列化的目的 ##1.以某种存储形式使自定义对象持久化 ##2.将对象从一个地方传递 ...
随机推荐
- 泛函编程(5)-数据结构(Functional Data Structures)
编程即是编制对数据进行运算的过程.特殊的运算必须用特定的数据结构来支持有效运算.如果没有数据结构的支持,我们就只能为每条数据申明一个内存地址了,然后使用这些地址来操作这些数据,也就是我们熟悉的申明变量 ...
- Guava学习笔记:Preconditions优雅的检验参数
在日常开发中,我们经常会对方法的输入参数做一些数据格式上的验证,以便保证方法能够按照正常流程执行下去.对于可预知的一些数据上的错误,我们一定要做事前检测和判断,来避免程序流程出错,而不是完全通过错误处 ...
- VIRTUALBOX 虚拟机安装 OS X 10.9 MAVERICKS
VIRTUALBOX 虚拟机安装 OS X 10.9 MAVERICKS 原文链接:http://bbs.weiphone.com/read-htm-tid-7625465.html 原文作者已经写的 ...
- GJM : Unity3D - UI - UI边缘流光特效小技巧 [转载]
感谢您的阅读.喜欢的.有用的就请大哥大嫂们高抬贵手"推荐一下"吧!你的精神支持是博主强大的写作动力以及转载收藏动力.欢迎转载! 版权声明:本文原创发表于 [请点击连接前往] ,未经 ...
- 正确的前端传后台json方式
DEMO: var data=JSON.stringify({"page": {"pagenow": 1,"pagesize": 20},& ...
- 03Mybatis_mybatis框架原理——执行流程
mybatis的框架的原理(执行流程).
- 哇 真的是一个好插件!!!Sublime Text编辑文件后快速刷新浏览器
http://9iphp.com/web/html/sublime-text-refresh-browser.html这篇博文咯 来源:[Tips]Sublime Text编辑文件后快速刷新浏览器 - ...
- 安装配置php5.4 win2003
php php-5.4.38 1.下载 http://windows.php.net/downloads/releases/php-5.4.38-Win32-VC9-x86.zip 解压到 D:\we ...
- #8.11.16总结#CSS常用样式总结(二)
border 边框 简写:border:1px solid #000; 等效于:border-width:1px;border-style:solid;border-color:#000; 顺序:b ...
- JavaScript强化教程——JavaScript 总结
本教程中我们向您讲授了如何向 html 页面添加 JavaScript,使得网站的动态性和交互性更强. 你已经学习了如何创建对事件的响应,验证表单,以及如何根据不同的情况运行不同的脚本. 你也学到了如 ...