pythonjson序列化_Python Json序列化与反序列化的示例
不同的编程语言有不同的数据类型; 比如说:
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)
未序列化前的数据类型为:
为序列化前的数据: {'name': 'zhangsan', 'address': '红星路', 'age': 33}
序列化后的数据类型为:
序列化后的数据为: {"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)
未序列化前的数据类型为:
为序列化前的数据: {'address': '红星路', 'age': 33, 'name': 'zhangsan'}
序列化后的数据类型为:
序列化后的数据为: {"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)
未序列化前的数据类型为:
为序列化前的数据: {'name': 'zhangsan', 'age': 33, 'address': '红星路'}
序列化后的数据类型为:
序列化后的数据为: {"name": "zhangsan", "age": 33, "address": "红星路"}
反序列化后的数据类型为:
反序列化后的数据为: {'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']
数据类型:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
pythonjson序列化_Python Json序列化与反序列化的示例相关推荐
- Java序列化——JDK序列化与Json序列化
Java原生序列化 Java原生序列化我们可能会了解的比较多,Java类通过实现Serializable接口来实现该类对象的序列化,这个接口非常特殊,没有任何方法,只起标识作用.Java序列化保留了对 ...
- Atitit php序列化 php的serialize序列化和json序列化
Atitit php序列化 php的serialize序列化和json序列化 PHP 对不同类型的数据用不同的字母进行标示,Yahoo 开发网站提供的Using Serialized PHP with ...
- json 序列化 java_Java JSON序列化杂谈
在C#中序列化是比较容易的,如果不用第三方的类库,那么C#提供的两个对象也够我们使用,一般的操作是定义一个不含有方法的类,这个类里面定义了要序列化的对象的属性,因为我C#用的比较多,这里直接给出泛型, ...
- JAVA生成json效率_java序列化和json序列化效率对比
一.背景 有项目需要传输Map结构的数据,有人倾向用Java序列化来做,有人倾向用JSON的序列化来做.所以我们还是比比吧. Java观点:Object2Object,使用时简单快速. JSON观点: ...
- python 序列化_python怎么序列化
pickle模块,json模块 (1)把变量从内存中变成可存储或传输的过程,称之为序列化.Python中叫pickling,其他语言中也被称为serialization,marshalling,fla ...
- 18.在springboot中的RedisTemplate序列化,json序列化
序列化:把对象转化为可传输的字节序列过程称为序列化. 反序列化:把字节序列还原为对象的过程称为反序列化.. 为什么需要序列化 序列化最终的目的是为了对象可以跨平台存储,和进行网络传输.而我们进行跨平台 ...
- 简单了解各种序列化技术-JSON序列化框架
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,相对于XML来说,JSON的字节流更小,而且可读性也非常好.现在JSON数据格式在企业运用是最普遍的 JSO ...
- python 序列化_python之序列化
什么叫序列化? 序列化是指把内存里的数据类型转变成字符串,以使其能存储到硬盘或通过网络传输到远程,因为硬盘或网络传输时只能接受bytes. 把字符转换成内存数据类型,叫反序列化. 为什么要序列化? 你 ...
- python3序列化_python3 json序列化问题
问题: python3中使用json.dumps(dicts)序列化字典时,如果字典中含有自定义的项时报错:TypeError: Object of type 'bytes' is not JSON ...
最新文章
- python property装饰器原理,Python @property装饰器不起作用
- 使用SecureCRT设置linux系统登录的ssh公钥认证
- 【职场】还真的遇到了个失业开滴滴的程序员
- TIP 2018论文概述:基于深度学习的HEVC复杂度优化
- [BeiJing2010组队]次小生成树 Tree
- SAP CRM的Genil层和Hybris的jalo模型
- Linux进程全解9——进程状态、system函数、进程间的关系
- python怎么连接数据库并且查看数据是否存在_如何使用python连接数据库,插入并查询数据...
- python所有软件-如何在Python中列出所有已安装的软件包及其版本?
- 快捷键截屏_win7截图快捷键是什么 win7截图快捷键怎么按
- 计算机如何取消自动关机,怎么解除电脑自动关机
- 强烈推荐APP破解常用工具集合!最强总结
- ubuntu14.04上安装Mist
- MapReducer Counter计数器的使用,Combiner ,Partitioner,Sort,Grop的使用,
- 网上银行系统5:系统登陆
- 阿里建站——通过阿里云平台搭建网站(阿里云+云市场+手动)
- 线性代数:裁剪变换(投影变换)(一)
- linux批量修改文件名字
- 【数据来源】如何选择合适的第三方数据源
- 一个离职员工对中兴的回望