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运用于数据分析的简单教程
Mar 27 Python
python中numpy包使用教程之数组和相关操作详解
Jul 30 Python
解决出现Incorrect integer value: '' for column 'id' at row 1的问题
Oct 29 Python
通过Python 获取Android设备信息的轻量级框架
Dec 18 Python
Python实现的当前时间多加一天、一小时、一分钟操作示例
May 21 Python
Python中的集合介绍
Jan 28 Python
python绘图模块matplotlib示例详解
Jul 26 Python
Python使用微信itchat接口实现查看自己微信的信息功能详解
Aug 22 Python
Python基础之函数基本用法与进阶详解
Jan 02 Python
python为Django项目上的每个应用程序创建不同的自定义404页面(最佳答案)
Mar 09 Python
Django ForeignKey与数据库的FOREIGN KEY约束详解
May 20 Python
Python 字典中的所有方法及用法
Jun 10 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
隐藏X-Space个人空间下方版权方法隐藏X-Space个人空间标题隐藏X-Space个人空间管理版权方法
2007/02/22 PHP
php仿ZOL分页类代码
2008/10/02 PHP
奇怪的PHP引用效率问题分析
2012/03/23 PHP
Laravel框架控制器的middleware中间件用法分析
2019/09/30 PHP
php获取是星期几的的一些常用姿势
2019/12/15 PHP
form表单只提交数据而不进行页面跳转的解决方案
2013/09/18 Javascript
给事件响应函数传参数的四种方式小结
2013/12/05 Javascript
node.js实现逐行读取文件内容的代码
2014/06/27 Javascript
javascript检查某个元素在数组中的索引值
2016/03/30 Javascript
Bootstrap所支持的表单控件实例详解
2016/05/16 Javascript
jQuery插件HighCharts实现的2D回归直线散点效果示例【附demo源码下载】
2017/03/09 Javascript
浅谈js-FCC算法Friendly Date Ranges(详解)
2017/04/10 Javascript
Vue.js框架路由使用方法实例详解
2017/08/25 Javascript
收集前端面试题之url、href、src
2018/03/22 Javascript
如何用input标签和jquery实现多图片的上传和回显功能
2018/05/16 jQuery
使用Sonarqube扫描Javascript代码的示例
2018/12/26 Javascript
实例详解vue中的$root和$parent
2019/04/29 Javascript
js图数据结构处理 迪杰斯特拉算法代码实例
2019/09/11 Javascript
vue 获取及修改store.js里的公共变量实例
2019/11/06 Javascript
[02:29]DOTA2英雄基础教程 陈
2013/12/17 DOTA
[07:43]《辉夜杯》公开赛晋级外卡赛战队—TRG训练生活探秘
2015/12/11 DOTA
Python字符串替换实例分析
2015/05/11 Python
python脚本设置系统时间的两种方法
2016/02/21 Python
python中的字典使用分享
2016/07/31 Python
基于Python 装饰器装饰类中的方法实例
2018/04/21 Python
python实现RabbitMQ的消息队列的示例代码
2018/11/08 Python
python实现粒子群算法
2020/10/15 Python
Vrbo英国:预订度假屋
2020/08/19 全球购物
集团公司人力资源部岗位职责
2014/01/03 职场文书
大四学生思想汇报
2014/01/13 职场文书
2014年端午节活动方案
2014/03/11 职场文书
妇联领导班子剖析材料
2014/08/21 职场文书
关于运动会的广播稿(10篇)
2014/09/12 职场文书
见习报告格式要求
2014/11/04 职场文书
2016新年慰问信范文
2015/03/25 职场文书
2015年行政助理工作总结
2015/04/30 职场文书