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实现跨文件全局变量的方法
Jul 07 Python
python中os操作文件及文件路径实例汇总
Jan 15 Python
python通过pil模块获得图片exif信息的方法
Mar 16 Python
举例讲解Python中的list列表数据结构用法
Mar 12 Python
Python模拟鼠标点击实现方法(将通过实例自动化模拟在360浏览器中自动搜索python)
Aug 23 Python
Python通过调用mysql存储过程实现更新数据功能示例
Apr 03 Python
python3.5绘制随机漫步图
Aug 27 Python
详解Python中的测试工具
Jun 09 Python
简单了解python中的f.b.u.r函数
Nov 02 Python
Python类和实例的属性机制原理详解
Mar 21 Python
解决keras使用cov1D函数的输入问题
Jun 29 Python
Python实现手势识别
Oct 21 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介绍篇
2010/10/26 PHP
PHP中的生成XML文件的4种方法分享
2012/10/06 PHP
php采用curl访问域名返回405 method not allowed提示的解决方法
2014/06/26 PHP
CentOS安装php v8js教程
2015/02/26 PHP
详解php curl带有csrf-token验证模拟提交方法
2018/04/18 PHP
php提供实现反射的方法和实例代码
2019/09/17 PHP
关于laravel模板中生成URL的几种模式总结
2019/10/18 PHP
JavaScript实际应用:innerHTMl和确认提示的使用
2006/06/22 Javascript
国外Lightbox v2.03.3 最新版 下载
2007/10/17 Javascript
javascript for循环设法提高性能
2010/02/24 Javascript
Jquery:ajax实现翻页无刷新功能代码
2013/08/05 Javascript
jquery indexOf使用方法
2013/08/19 Javascript
利用JS进行图片的切换即特效展示图片
2013/12/03 Javascript
jquery toolbar与网页浮动工具条具体实现代码
2014/01/12 Javascript
window.location不跳转的问题解决方法
2014/04/17 Javascript
JavaScript每天必学之事件
2016/09/18 Javascript
json定义及jquery操作json的方法
2016/10/03 Javascript
js阻止冒泡和默认事件(默认行为)详解
2016/10/20 Javascript
jquery配合.NET实现点击指定绑定数据并且能够一键下载
2016/10/28 Javascript
AngularJs表单验证实例代码解析
2016/11/29 Javascript
vue.js指令v-model实现方法
2016/12/05 Javascript
JavaScript实现经典排序算法之插入排序
2016/12/28 Javascript
ES6/JavaScript使用技巧分享
2017/12/14 Javascript
vue对storejs获取的数据进行处理时遇到的几种问题小结
2018/03/20 Javascript
详解基于React.js和Node.js的SSR实现方案
2019/03/21 Javascript
Vue-router中hash模式与history模式的区别详解
2020/12/15 Vue.js
python pandas读取csv后,获取列标签的方法
2018/11/12 Python
Selenium webdriver添加cookie实现过程详解
2020/08/12 Python
Argos官网:英国家喻户晓的百货零售连锁商
2017/04/03 全球购物
日本必酷网络直营店:Biccamera
2019/03/23 全球购物
中东奢侈品市场:Coveti
2019/05/12 全球购物
大班上学期幼儿评语
2014/04/30 职场文书
电子信息专业应届生自荐信
2014/06/04 职场文书
Python中的turtle画箭头,矩形,五角星
2022/03/16 Python
Springboot集成kafka高级应用实战分享
2022/08/14 Java/Android