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中的ceil()方法使用教程
May 14 Python
Django中的CACHE_BACKEND参数和站点级Cache设置
Jul 23 Python
简单解决Python文件中文编码问题
Nov 22 Python
Python的Tornado框架的异步任务与AsyncHTTPClient
Jun 27 Python
Python采用Django制作简易的知乎日报API
Aug 03 Python
解决python 3 urllib 没有 urlencode 属性的问题
Aug 22 Python
解决tensorflow由于未初始化变量而导致的错误问题
Jan 06 Python
使用Tensorboard工具查看Loss损失率
Feb 15 Python
next在python中返回迭代器的实例方法
Dec 15 Python
Python List remove()实例用法详解
Aug 02 Python
Python3的进程和线程你了解吗
Mar 16 Python
python解析json数据
Apr 29 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
建立动态的WML站点(二)
2006/10/09 PHP
对象失去焦点时自己动提交数据的实现代码
2012/11/06 PHP
定义php常量的详解
2013/06/09 PHP
搭建自己的PHP MVC框架详解
2017/08/16 PHP
jQuery选择器源码解读(八):addCombinator函数
2015/03/31 Javascript
jQuery实现仿Google首页拖动效果的方法
2015/05/04 Javascript
JS实现简单的二维矩阵乘积运算
2016/01/26 Javascript
javascript函数命名的三种方式及区别介绍
2016/03/22 Javascript
JS实现页面中所有img对象添加onclick事件及新窗口查看图片的方法
2016/12/27 Javascript
Node.js获取前端ajax提交的request信息
2017/02/20 Javascript
最基础的vue.js双向绑定操作
2017/08/23 Javascript
解决vue.js在编写过程中出现空格不规范报错的问题
2017/09/20 Javascript
使用ionic(选项卡栏tab) icon(图标) ionic上拉菜单(ActionSheet) 实现通讯录界面切换实例代码
2017/10/20 Javascript
vue的token刷新处理的方法
2018/07/17 Javascript
解决vue中虚拟dom,无法实时更新的问题
2018/09/15 Javascript
js实现多个倒计时并行 js拼团倒计时
2019/02/25 Javascript
JS中的算法与数据结构之常见排序(Sort)算法详解
2019/08/16 Javascript
详解Vue template 如何支持多个根结点
2020/02/10 Javascript
JavaScript ECMA-262-3 深入解析(一):执行上下文实例分析
2020/04/25 Javascript
js+cavans实现图片滑块验证
2020/09/29 Javascript
微信小程序开发数据缓存基础知识辨析及运用实例详解
2020/11/06 Javascript
Python中最常用的操作列表的几种方法归纳
2015/04/24 Python
python比较两个列表是否相等的方法
2015/07/28 Python
Python编程之string相关操作实例详解
2017/07/22 Python
python实战教程之自动扫雷
2018/07/13 Python
python 使用turtule绘制递归图形(螺旋、二叉树、谢尔宾斯基三角形)
2019/05/30 Python
解决python 上传图片限制格式问题
2019/10/30 Python
在django中使用apscheduler 执行计划任务的实现方法
2020/02/11 Python
Python Pillow(PIL)库的用法详解
2020/09/19 Python
经贸日语毕业生自荐信
2013/11/03 职场文书
分厂厂长岗位职责
2013/12/29 职场文书
入党思想汇报
2014/01/05 职场文书
自强自立美德少年事迹材料
2014/08/16 职场文书
幼儿园校园小喇叭广播稿
2014/10/17 职场文书
CSS3 天气图标动画效果
2021/04/06 HTML / CSS
一文带你探究MySQL中的NULL
2021/11/11 MySQL