Python Json序列化与反序列化
在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 Json序列化与反序列化的更多相关文章
- python json序列化与反序列化操作
python json序列化与反序列化操作 # dumps() dict-->str 序列化 # loads() str---dict 反序列化 result1 = json.dumps({'a ...
- python的序列化和反序列化以及json
python 的序列化和反序列化用于内存之间的共享,包括服务器和客户端的共享,两个Python程序之间的共享,以及以字符串的形式存储到硬盘中. pyhton 的pickle 可以对Python的各种数 ...
- python:序列化与反序列化(json、pickle、shelve)
本节内容 前言 json模块 pickle模块 shelve模块 总结 一.前言 1. 现实需求 每种编程语言都有各自的数据类型,其中面向对象的编程语言还允许开发者自定义数据类型(如:自定义类),Py ...
- Python实现JSON序列化和反序列化
在我的应用中,序列化就是把类转成符合JSON格式的字符串,反序列化就是把JSON格式的字符串转换成类.C#的话直接用Newtonsoft.JSON就可以了,非常好用.本来以为python也会有类似的库 ...
- DotNet的JSON序列化与反序列化
JSON(JavaScript Object Notation)JavaScript对象表示法,它是一种基于文本,独立于语言的轻量级数据交换格式.在现在的通信中,较多的采用JSON数据格式,JSON有 ...
- C#中JSON序列化和反序列化
有一段时间没有到博客园写技术博客了,不过每天逛逛博客园中大牛的博客还是有的,学无止境…… 最近在写些调用他人接口的程序,用到了大量的JSON.XML序列化和反序列化,今天就来总结下json的序列化和反 ...
- Newtonsoft.Json 序列化和反序列化 时间格式
From : http://www.cnblogs.com/litian/p/3870975.html 1.JSON序列化 string JsonStr= JsonConvert.SerializeO ...
- Net中JSON序列化和反序列化处理(日期时间特殊处理)
0 缘由 笔者最近在web api端使用Json.Net进行序列化处理,而在调用端使用DataContractSerializer进行反序列化,遇到日期时间处理反序列化不成功[备注:笔者使用Net ...
- Newtonsoft.Json 序列化和反序列化 时间格式 [转]
1.JSON序列化 string JsonStr= JsonConvert.SerializeObject(Entity); eg: A a=new A(); a.Name="Elain ...
随机推荐
- 【error】select timeout问题
使用摄像头的过程中出现这个问题,说明是找不到摄像头了, 有可能是摄像头驱动问题,也有可能是摄像头接口处接触不良等原因造成的. re 1.select-timeout-opencv; End
- 批量读取文件matlab
前言 工程实现的过程中经常需要依次读取文件夹中的图像(或者其他文件),本文就对此进行实现. 代码 % /************************************************ ...
- C#浮点数保留位数
C#浮点数保留位数 这里用String.Forma("{0:F}",x);来解决. 下面是试验和截图 using System; using System.Collections. ...
- harbor helm 仓库使用
harbor 已经支持helm 私服仓库了,还是比较方便的 安装 下载在线安装包 wget https://storage.googleapis.com/harbor-releases/release ...
- ory Oathkeeper Ecosystem
ory Oathkeeper 生态包含的组件 ORY Hydra is an OAuth 2.0 and OpenID Connect provider. ORY Oathkeeper is an I ...
- visual studio 2014 新特性
原文如下: Visual Studio "14" CTP Today, we are making available a first community technology p ...
- juc并发工具类之CountDownLatch闭锁
import java.util.concurrent.CountDownLatch; /** * 闭锁: 在进行某些运算时, 只有其他所有线程的运算全部完成,当前运算才继续执行(程序流中加了一道栅栏 ...
- Jsp Session
1. Session的定义 Session用于跟踪客户的状态. Session指的是在一段时间内,单个客户与Web服务器的一连串相关的交互过程.在一个Session中 ,客户可能多次请求访问同一个网页 ...
- 一个高效的敏感词过滤方法(PHP)
$badword = array( '张三','张三丰','张三丰田' ); $badword1 = array_combine($badword,array_fill(0,count($badwor ...
- ASP.NET网站权限设计实现(三)——套用JQuery EasyUI列表显示数据、分页、查询
一.说明: JQuery EasyUI下载地址:http://jquery-easyui.wikidot.com/download,最新版本1.2.2. 首先预览一下界面: 本例实现的功能: 1.多标 ...