Python Json序列化与反序列化的示例


Posted in Python onJanuary 31, 2018

不同的编程语言有不同的数据类型; 比如说:

Python的数据类型有(dict、list、string、int、float、long、bool、None)
Java的数据类型有(bool、char、byte、short、int、long、float、double)
C的数据类型有(bit、bool、char、int、short、long、unsigned、double、float)
Tcl的数据类型(int、bool、float、string)
Ruby的数据类型(Number、String、Ranges、Symbols、true、false、Array、Hash)
...

他们的共同特点是,都有字符串类型!

所以要实现不同的编程语言之间对象的传递,就必须把对象序列化为标准格式,比如XML,但更好的方法是序列化为JSON,因为JSON表示出来就是一个字符串,可以被所有语言读取,也可以方便地存储到磁盘或者通过网络传输。
JSON不仅是标准格式,并且比XML更快,而且可以直接在Web页面中读取,非常方便.

JSON类型     Python类型
{}                  dict
[]                  list
"string"            str
1234.56             int或float
true                True
false               False
null                None

在python中,序列化可以理解为:把python的对象编码转换为json格式的字符串,反序列化可以理解为:把json格式字符串解码为python数据对象。在python的标准库中,专门提供了json库与pickle库来处理这部分。

json的dumps方法和loads方法,可实现数据的序列化和反序列化。具体来说,dumps方法,可将json格式数据序列为Python的相关的数据类型;loads方法则是相反,把python数据类型转换为json相应的数据类型格式要求。在序列化时,中文汉字总是被转换为unicode码,在dumps函数中添加参数ensure_ascii=False即可解决。

下面是json的序列化与反序列化:

1、Json序列化如下:

import json
print (json.__all__)  #查看json库的所有方法
['dump', 'dumps', 'load', 'loads', 'JSONDecoder', 'JSONEncoder']

未在dumps函数中添加参数ensure_ascii=False,结果如下:

#coding: utf-8
import json
dict = {'name':'zhangsan', 'age':33, 'address':'红星路'}
print('未序列化前的数据类型为:', type(dict))
print('为序列化前的数据:', dict)
#对dict进行序列化的处理
dict_xu = json.dumps(dict)  #直接进行序列化
print('序列化后的数据类型为:', type(dict_xu))
print('序列化后的数据为:', dict_xu)

未序列化前的数据类型为: <class 'dict'>
为序列化前的数据: {'name': 'zhangsan', 'address': '红星路', 'age': 33}
序列化后的数据类型为: <class 'str'>
序列化后的数据为: {"name": "zhangsan", "address": "\u7ea2\u661f\u8def", "age": 33}

在dumps函数中添加参数ensure_ascii=False,结果如下:

#coding: utf-8
import json

dict = {'name':'zhangsan', 'age':33, 'address':'红星路'}
print('未序列化前的数据类型为:', type(dict))
print('为序列化前的数据:', dict)
#对dict进行序列化的处理
dict_xu = json.dumps(dict,ensure_ascii=False)  #添加ensure_ascii=False进行序列化
print('序列化后的数据类型为:', type(dict_xu))
print('序列化后的数据为:', dict_xu)

未序列化前的数据类型为: <class 'dict'>
为序列化前的数据: {'address': '红星路', 'age': 33, 'name': 'zhangsan'}
序列化后的数据类型为: <class 'str'>
序列化后的数据为: {"address": "红星路", "age": 33, "name": "zhangsan"}

2、Json反序列化如下:

#coding: utf-8
import json
dict = {'name':'zhangsan', 'age':33, 'address':'红星路'}
print('未序列化前的数据类型为:', type(dict))
print('为序列化前的数据:', dict)
#对dict进行序列化的处理
dict_xu = json.dumps(dict,ensure_ascii=False)  #添加ensure_ascii=False进行序列化
print('序列化后的数据类型为:', type(dict_xu))
print('序列化后的数据为:', dict_xu)
#对dict_xu进行反序列化处理
dict_fan = json.loads(dict_xu)
print('反序列化后的数据类型为:', type(dict_fan))
print('反序列化后的数据为: ', dict_fan)

未序列化前的数据类型为: <class 'dict'>
为序列化前的数据: {'name': 'zhangsan', 'age': 33, 'address': '红星路'}
序列化后的数据类型为: <class 'str'>
序列化后的数据为: {"name": "zhangsan", "age": 33, "address": "红星路"}
反序列化后的数据类型为: <class 'dict'>
反序列化后的数据为:  {'name': 'zhangsan', 'age': 33, 'address': '红星路'}

在实际的工作中,序列化或者反序列化的可能是一个文件的形式,不可能像如上写的那样简单的,下来就来实现这部分,把文件内容进行序列化和反序列化,先来看序列化的代码,两步操作:1、先序列化 列表对象 ;2、步把序列化成的字符串写入文件:

#coding: utf-8
import json

list = ['Apple','Huawei','selenium','java','python']
#把list先序列化,写入到一个文件中
# 两步操作 1步先序列化 列表对象 2步把序列化成的字符串写入文件
json.dump(list, open('e:/test.txt','w'))  
r1=open('e:/test.txt','r')
print(r1.read())

["Apple", "Huawei", "selenium", "java", "python"]

反序列化,两步操作:1、先读取文件的字符串对象;2、然后反序列化成列表对象:

#coding: utf-8
import json

list = ['Apple','Huawei','selenium','java','python']
#把list先序列化,写入到一个文件中
# 两步操作 1步先序列化 列表对象 2步把序列化成的字符串写入文件
json.dump(list, open('e:/test.txt','w'))  
r1=open('e:/test.txt','r')
print(r1.read())
#------------------------------------------------------------
#两步操作:1、先读取文件的字符串对象;2、然后反序列化成列表对象
res=json.load(open('e:/test.txt','r'))
print (res)
print('数据类型:',type(res))

["Apple", "Huawei", "selenium", "java", "python"]
['Apple', 'Huawei', 'selenium', 'java', 'python']
数据类型: <class 'list'>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python批量创建迅雷任务及创建多个文件
Feb 13 Python
Python3使用正则表达式爬取内涵段子示例
Apr 22 Python
python队列queue模块详解
Apr 27 Python
python基于http下载视频或音频
Jun 20 Python
Python字典创建 遍历 添加等实用基础操作技巧
Sep 13 Python
Python3的介绍、安装和命令行的认识(推荐)
Oct 20 Python
Python爬虫实现获取动态gif格式搞笑图片的方法示例
Dec 24 Python
python将邻接矩阵输出成图的实现
Nov 21 Python
python shutil文件操作工具使用实例分析
Dec 25 Python
Python3+selenium实现cookie免密登录的示例代码
Mar 18 Python
Python3+selenium配置常见报错解决方案
Aug 28 Python
python 实现图片裁剪小工具
Feb 02 Python
Python实现JSON反序列化类对象的示例
Jan 31 #Python
python删除过期log文件操作实例解析
Jan 31 #Python
Python实现的井字棋(Tic Tac Toe)游戏示例
Jan 31 #Python
使用Python制作微信跳一跳辅助
Jan 31 #Python
python模块之paramiko实例代码
Jan 31 #Python
Python进度条实时显示处理进度的示例代码
Jan 30 #Python
Python3生成手写体数字方法
Jan 30 #Python
You might like
PHP图形操作之Jpgraph学习笔记
2015/12/25 PHP
javascript各种复制代码收集
2008/09/20 Javascript
深入剖析JavaScript中的枚举功能
2014/03/06 Javascript
Javascript中浮点数相乘的一个解决方法
2014/06/03 Javascript
更高效的使用JQuery 这里总结了8个小技巧
2016/04/13 Javascript
浅谈时钟的生成(js手写简洁代码)
2016/08/20 Javascript
jQuery弹出窗口简单实现代码
2017/03/09 Javascript
vue+webpack实现异步组件加载的方法
2018/02/03 Javascript
JavaScript实现短暂提示框功能
2018/04/04 Javascript
从0到1构建vueSSR项目之node以及vue-cli3的配置
2019/03/07 Javascript
vue+element+Java实现批量删除功能
2019/04/08 Javascript
vue cli4.0项目引入typescript的方法
2020/07/17 Javascript
vue添加锚点,实现滚动页面时锚点添加相应的class操作
2020/08/10 Javascript
Python利用BeautifulSoup解析Html的方法示例
2017/07/30 Python
基于Python列表解析(列表推导式)
2018/06/23 Python
Python面向对象程序设计示例小结
2019/01/30 Python
Python PO设计模式的具体使用
2019/08/16 Python
Python Socket TCP双端聊天功能实现过程详解
2020/06/15 Python
如何用用Python将地址标记在地图上
2021/02/07 Python
使用css3实现的tab选项卡代码分享
2014/12/09 HTML / CSS
使用CSS变量实现炫酷惊人的悬浮效果
2019/04/26 HTML / CSS
请写出 float x 与"零值"比较的 if 语句
2016/01/04 面试题
测绘工程系学生的自我评价
2013/11/30 职场文书
大学生最常用的自我评价
2013/12/07 职场文书
厂长岗位职责
2014/02/19 职场文书
投标人法定代表人授权委托书格式
2014/09/28 职场文书
大学生党员自我剖析材料
2014/10/06 职场文书
2014年军人思想汇报范文
2014/10/12 职场文书
普通党员个人整改措施
2014/10/27 职场文书
工厂门卫岗位职责
2015/04/13 职场文书
2015年企业团支部工作总结
2015/05/21 职场文书
运动会致辞稿
2015/07/29 职场文书
2016应届毕业生就业指导课心得体会
2016/01/15 职场文书
市语委办2016年第十九届“推普周”活动总结
2016/04/05 职场文书
Django分页器的用法你都了解吗
2021/05/26 Python
Win11自动黑屏怎么办 Win11自动黑屏设置教程
2022/07/15 数码科技