Python序列化模块JSON与Pickle


Posted in Python onJune 05, 2022

序列化把对象(变量)从内存中变成可存储或传输的过程称之为序列化,在Python中叫pickling,在其他语言中也被称之为serialization,marshalling,flattening。

一、JSON序列化

使用json序列化能够达到跨平台传输数据的目的。

跨平台性质,它可以序列化dict/list/str/int/float/bool/None数据类型。

序列化成json文本格式。

1、json数据类型和python数据类型对应关系表:

Json类型<——>Python类型

  • {}<——>dict
  • []<——>list, tuple
  • "string"<——>str, unicode
  • 520.13<——>int, long, float
  • true/false<——>True/False
  • null<——>None

2、相关函数

(2)序列化

  • 序列化成字符串:json.dumps(json_obj)
  • 序列化字符串到文件中:json.dump(json_obj, write_file, [,protocol])

(2)反序列化

  • 反序列化成对象:json.loads(json_str)
  • 从文件读流中反序列化成对象:json.load(read_file)

3、举例:

import json

struct_data = {'name': 'json', 'age': 23, 'sex': 'male'}
print(struct_data, type(struct_data))  # {'name': 'json', 'age': 23, 'sex': 'male'} 
# 序列化
data = json.dumps(struct_data)
print(data, type(data))  # {"name": "json", "age": 23, "sex": "male"} 

# 反序列化
data = json.loads(data)
print(data, type(data))  # {'name': 'json', 'age': 23, 'sex': 'male'}

磁盘文件操作

import json

# 序列化,写入磁盘
with open('Json序列化对象.json', 'w') as fw:
    json.dump(struct_data, fw)

# 从文件读取,反序列化
with open('Json序列化对象.json') as fr:
    data = json.load(fr)
print(data)  # {'name': 'json', 'age': 23, 'sex': 'male'}

二、Pickle序列化

pickle无法跨平台,序列化之后只有python识别。但是可以序列化Python的任意数据类型,包括函数和对象。

Json模块和picle模块都有 dumps、dump、loads、load四种方法,而且用法一样。但是序列化成二进制形式。

1、举例:

import pickle

struct_data = {'name': 'json', 'age': 23, 'sex': 'male'}
print(struct_data, type(struct_data))  # {'name': 'json', 'age': 23, 'sex': 'male'} 

data = pickle.dumps(struct_data)
print(data, type( data))  # b'\x80\x03}q\x00(X\x04\x00\x00\x00nameq\x01X\x04\x00\x00\x00jsonq\x02X\x03\x00\x00\x00ageq\x03K\x17X\x03\x00\x00\x00sexq\x04X\x04\x00\x00\x00maleq\x05u.' 

data = pickle.loads(data)
print(data, type(data))  # {'name': 'json', 'age': 23, 'sex': 'male'} 'dict'>

# 序列化(注意:pickle模块需要使用二进制存储,即'wb'模式存储)
with open('Pickle序列化对象.pkl', 'wb') as fw:
    pickle.dump(struct_data, fw)

# 反序列化
with open('Pickle序列化对象.pkl', 'rb') as fr:
    pickle = pickle.load(fr)
print(data)  # {'name': 'json', 'age': 23, 'sex': 'male'}

2、base64与pickle联合使用

str = 'Hello World'  # 加密前,原始数据
a = base64.b64encode(pickle.dumps(str)).decode()  # 加密
print(a) # gANYCwAAAEhlbGxvIFdvcmxkcQAu
b = pickle.loads(base64.b64decode(a.encode()))  # 解密
print(b)

到此这篇关于Python序列化模块JSON与Pickle的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。


Tags in this post...

Python 相关文章推荐
跟老齐学Python之类的细节
Oct 13 Python
用实例解释Python中的继承和多态的概念
Apr 27 Python
Python求两个文本文件以行为单位的交集、并集与差集的方法
Jun 17 Python
Python中文竖排显示的方法
Jul 28 Python
Python实现简单多线程任务队列
Feb 27 Python
python 垃圾收集机制的实例详解
Aug 20 Python
浅谈Python中range和xrange的区别
Dec 20 Python
Python面向对象程序设计之私有属性及私有方法示例
Apr 08 Python
Python实现二叉搜索树BST的方法示例
Jul 30 Python
python中的RSA加密与解密实例解析
Nov 18 Python
python怎么调用自己的函数
Jul 01 Python
Python grpc超时机制代码示例
Sep 14 Python
python 判断字符串当中是否包含字符(str.contain)
Python测试框架pytest高阶用法全面详解
Python使用Web框架Flask开发项目
Jun 01 #Python
numpy array找出符合条件的数并赋值的示例代码
Jun 01 #Python
 python中的元类metaclass详情
May 30 #Python
Python自动化实战之接口请求的实现
Python中的 enumerate和zip详情
May 30 #Python
You might like
php基于PDO连接MSSQL示例DEMO
2016/07/13 PHP
比较完整的微信开发php代码
2016/08/02 PHP
PHP中文字符串截断无乱码解决方法
2016/10/10 PHP
微信公众平台开发-微信服务器IP接口实例(含源码)
2017/03/05 PHP
PHP中类型转换 ,常量,系统常量,魔术常量的详解
2017/10/26 PHP
详细分析PHP 命名空间(namespace)
2020/06/30 PHP
JQuery学习笔记 nt-child的使用
2011/01/17 Javascript
Javascript解析URL方法详解
2014/12/05 Javascript
jQuery编程中的一些核心方法简介
2015/08/14 Javascript
js实现仿百度风云榜可重复多次调用的TAB切换选项卡效果
2015/08/31 Javascript
js实现表单多按钮提交action的处理方法
2015/10/24 Javascript
JavaScript中的函数(二)
2015/12/23 Javascript
JavaScript 数组some()和filter()的用法及区别
2016/05/20 Javascript
JS阻止事件冒泡行为和闭包的方法
2016/06/16 Javascript
Bootstrap实现的标签页内容切换显示效果示例
2017/05/25 Javascript
浅谈Express异步进化史
2017/09/09 Javascript
JS闭包的几种常见形式实例详解
2017/09/16 Javascript
jQuery实现对网页节点的增删改查功能示例
2017/09/18 jQuery
AngularJS双向数据绑定原理之$watch、$apply和$digest的应用
2018/01/30 Javascript
详解vue-router 初始化时做了什么
2018/06/11 Javascript
JavaScript的Object.defineProperty详解
2018/07/09 Javascript
Koa 使用小技巧(小结)
2018/10/22 Javascript
[03:44]2015国际邀请赛选手档案—Cloud9.NoTail
2015/07/28 DOTA
[51:10]VP vs VGJ.S 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
Python内置函数delattr的具体用法
2017/11/23 Python
Pycharm新手教程(只需要看这篇就够了)
2019/06/18 Python
Europcar德国:全球汽车租赁领域的领导者
2018/08/15 全球购物
医学护理系毕业生求职信
2013/10/01 职场文书
3D空间设计学生找工作的自我评价
2013/10/28 职场文书
优秀员工年终发言演讲稿
2014/01/01 职场文书
校园摄影活动策划方案
2014/02/05 职场文书
国际贸易毕业生求职信范文
2014/02/21 职场文书
行政文员实习自我鉴定范文
2014/09/14 职场文书
六年级数学教学反思
2016/02/16 职场文书
数学复习课教学反思
2016/02/18 职场文书
2019学生会干事辞职信
2019/06/27 职场文书