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 相关文章推荐
Windows下安装python2.7及科学计算套装
Mar 05 Python
在Mac OS上使用mod_wsgi连接Python与Apache服务器
Dec 24 Python
python Matplotlib画图之调整字体大小的示例
Nov 20 Python
python递归全排列实现方法
Aug 18 Python
Python编写合并字典并实现敏感目录的小脚本
Feb 26 Python
python高斯分布概率密度函数的使用详解
Jul 10 Python
Django框架ORM数据库操作实例详解
Nov 07 Python
python分布式计算dispy的使用详解
Dec 22 Python
详解Python3 中的字符串格式化语法
Jan 15 Python
利用python实现凯撒密码加解密功能
Mar 31 Python
python给list排序的简单方法
Dec 10 Python
Python爬虫+Tkinter制作一个翻译软件的示例
Feb 20 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
如何分别全角和半角以避免乱码
2006/10/09 PHP
php强大的时间转换函数strtotime
2016/02/18 PHP
Laravel如何创建服务器提供者实例代码
2019/04/15 PHP
fix-ie5.js扩展在IE5下不能使用的几个方法
2007/08/20 Javascript
优化Node.js Web应用运行速度的10个技巧
2014/09/03 Javascript
Javascript进制转换实例分析
2015/05/14 Javascript
使用jQuery在对象中缓存选择器的简单方法
2015/06/30 Javascript
浅析JavaScript作用域链、执行上下文与闭包
2016/02/01 Javascript
form表单转Json提交的方法(推荐)
2016/09/23 Javascript
JS判断微信扫码的方法
2017/08/07 Javascript
Angular4实现鼠标悬停3d倾斜效果
2017/10/25 Javascript
vue.js学习笔记之v-bind和v-on解析
2018/05/03 Javascript
JavaScript引用类型之基本包装类型实例分析【Boolean、Number和String】
2018/08/09 Javascript
Node.js中读取TXT文件内容fs.readFile()用法
2018/10/10 Javascript
解析JS在获取当前月的最后一天遇到的坑
2019/08/30 Javascript
在antd Table中插入可编辑的单元格实例
2020/10/28 Javascript
python的id()函数解密过程
2012/12/25 Python
python实现定制交互式命令行的方法
2014/07/03 Python
通过代码实例展示Python中列表生成式的用法
2015/03/31 Python
Python实现拷贝/删除文件夹的方法详解
2018/08/29 Python
TensorFlow tf.nn.conv2d_transpose是怎样实现反卷积的
2020/04/20 Python
Pycharm中配置远程Docker运行环境的教程图解
2020/06/11 Python
台湾流行服饰购物平台:OB严选
2018/01/21 全球购物
全球精选男装和家居用品:Article
2020/04/13 全球购物
汉语专业应届生求职信
2013/10/01 职场文书
最新个人职业生涯规划书
2014/01/22 职场文书
优秀班集体获奖感言
2014/02/03 职场文书
房产代理公证处委托书
2014/04/04 职场文书
员工培训协议书
2014/09/15 职场文书
致百米运动员广播稿5篇
2014/10/13 职场文书
个人整改方案范文
2014/10/25 职场文书
2014保险公司个人工作总结
2014/12/09 职场文书
JS中一些高效的魔法运算符总结
2021/05/06 Javascript
Java移除无效括号的方法实现
2021/08/07 Java/Android
Sql Server之数据类型详解
2022/02/28 SQL Server
十大公认最好看的动漫:《咒术回战》在榜,《钢之炼金术师》第一
2022/03/18 日漫