在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序列化如下:

1 import json
2 print (json.__all__)    #查看json库的所有方法
3 ['dump', 'dumps', 'load', 'loads', 'JSONDecoder', 'JSONEncoder']

  未在dumps函数中添加参数ensure_ascii=False,结果如下:

 1 #coding: utf-8
 2 import json
 3
 4 dict = {'name':'zhangsan', 'age':33, 'address':'红星路'}
 5 print('未序列化前的数据类型为:', type(dict))
 6 print('为序列化前的数据:', dict)
 7 #对dict进行序列化的处理
 8 dict_xu = json.dumps(dict)    #直接进行序列化
 9 print('序列化后的数据类型为:', type(dict_xu))
10 print('序列化后的数据为:', dict_xu)
11
12 ----------------------------------------------------------------
13 未序列化前的数据类型为: <class 'dict'>
14 为序列化前的数据: {'name': 'zhangsan', 'address': '红星路', 'age': 33}
15 序列化后的数据类型为: <class 'str'>
16 序列化后的数据为: {"name": "zhangsan", "address": "\u7ea2\u661f\u8def", "age": 33}

  在dumps函数中添加参数ensure_ascii=False,结果如下:

 1 #coding: utf-8
 2 import json
 3
 4 dict = {'name':'zhangsan', 'age':33, 'address':'红星路'}
 5 print('未序列化前的数据类型为:', type(dict))
 6 print('为序列化前的数据:', dict)
 7 #对dict进行序列化的处理
 8 dict_xu = json.dumps(dict,ensure_ascii=False)    #添加ensure_ascii=False进行序列化
 9 print('序列化后的数据类型为:', type(dict_xu))
10 print('序列化后的数据为:', dict_xu)
11 -------------------------------------------------------------------
12 未序列化前的数据类型为: <class 'dict'>
13 为序列化前的数据: {'address': '红星路', 'age': 33, 'name': 'zhangsan'}
14 序列化后的数据类型为: <class 'str'>
15 序列化后的数据为: {"address": "红星路", "age": 33, "name": "zhangsan"}

  2、Json反序列化如下:

 1 #coding: utf-8
 2 import json
 3
 4 dict = {'name':'zhangsan', 'age':33, 'address':'红星路'}
 5 print('未序列化前的数据类型为:', type(dict))
 6 print('为序列化前的数据:', dict)
 7 #对dict进行序列化的处理
 8 dict_xu = json.dumps(dict,ensure_ascii=False)    #添加ensure_ascii=False进行序列化
 9 print('序列化后的数据类型为:', type(dict_xu))
10 print('序列化后的数据为:', dict_xu)
11 #对dict_xu进行反序列化处理
12 dict_fan = json.loads(dict_xu)
13 print('反序列化后的数据类型为:', type(dict_fan))
14 print('反序列化后的数据为: ', dict_fan)
15 ----------------------------------------------------------------------
16 未序列化前的数据类型为: <class 'dict'>
17 为序列化前的数据: {'name': 'zhangsan', 'age': 33, 'address': '红星路'}
18 序列化后的数据类型为: <class 'str'>
19 序列化后的数据为: {"name": "zhangsan", "age": 33, "address": "红星路"}
20 反序列化后的数据类型为: <class 'dict'>
21 反序列化后的数据为:  {'name': 'zhangsan', 'age': 33, 'address': '红星路'}

  在实际的工作中,序列化或者反序列化的可能是一个文件的形式,不可能像如上写的那样简单的,下来就来实现这部分,把文件内容进行序列化和反序列化,先来看序列化的代码,两步操作:1、先序列化 列表对象 ;2、步把序列化成的字符串写入文件:

 1 #coding: utf-8
 2 import json
 3
 4 list = ['Apple','Huawei','selenium','java','python']
 5 #把list先序列化,写入到一个文件中
 6 # 两步操作 1步先序列化 列表对象  2步把序列化成的字符串写入文件
 7 json.dump(list, open('e:/test.txt','w'))
 8 r1=open('e:/test.txt','r')
 9 print(r1.read())
10 -------------------------------------------------------------------
11 ["Apple", "Huawei", "selenium", "java", "python"]

反序列化,两步操作:1、先读取文件的字符串对象;2、然后反序列化成列表对象:

 1 #coding: utf-8
 2 import json
 3
 4 list = ['Apple','Huawei','selenium','java','python']
 5 #把list先序列化,写入到一个文件中
 6 # 两步操作 1步先序列化 列表对象  2步把序列化成的字符串写入文件
 7 json.dump(list, open('e:/test.txt','w'))
 8 r1=open('e:/test.txt','r')
 9 print(r1.read())
10 #------------------------------------------------------------
11 #两步操作:1、先读取文件的字符串对象;2、然后反序列化成列表对象
12 res=json.load(open('e:/test.txt','r'))
13 print (res)
14 print('数据类型:',type(res))
15 -------------------------------------------------------------
16 ["Apple", "Huawei", "selenium", "java", "python"]
17 ['Apple', 'Huawei', 'selenium', 'java', 'python']
18 数据类型: <class 'list'>

转载于:https://www.cnblogs.com/diaosicai/p/6419833.html

Python Json序列化与反序列化相关推荐

  1. DotNet的JSON序列化与反序列化

    JSON(JavaScript Object Notation)JavaScript对象表示法,它是一种基于文本,独立于语言的轻量级数据交换格式.在现在的通信中,较多的采用JSON数据格式,JSON有 ...

  2. JSON序列化和反序列化还有这种玩法

    Mixin对于前端开发者可不陌生,Vue.React等知名前端框架都使用了Mixin.而对于后端开发,尤其是Java后端开发来说Mixin却是一个很陌生的概念.今天来我们通过Jackson让后端开发者 ...

  3. C#中JSON序列化和反序列化

    有一段时间没有到博客园写技术博客了,不过每天逛逛博客园中大牛的博客还是有的,学无止境-- 最近在写些调用他人接口的程序,用到了大量的JSON.XML序列化和反序列化,今天就来总结下json的序列化和反 ...

  4. json 反序列化 父子类型_Jaskson精讲第7篇-类继承关系下的JSON序列化与反序列化JsonTypeInfo...

    Jackson是Spring Boot(SpringBoot)默认的JSON数据处理框架,但是其并不依赖于任何的Spring 库.有的小伙伴以为Jackson只能在Spring框架内使用,其实不是的, ...

  5. Go进阶(7): JSON 序列化和反序列化

    1. json序列化和反序列化基础 json数据的序列化和反序列化是一种非常常见的方式,尤其是在http/rcp的微服务调试中. 基础语法 在 Go 中我们主要使用官方的 encoding/json  ...

  6. 序列化对象C++对象的JSON序列化与反序列化探索

    新手发帖,很多方面都是刚入门,有错误的地方请大家见谅,欢迎批评指正 一:背景 作为一名C++开发人员,我始终很期待能够像C#与JAVA那样,可以省力的进行对象的序列化与反序列化,但到现在为止,还没有找 ...

  7. php和js序列化,PHP中serialize和json序列化与反序列化的区别

    在PHP中,serialize和json两种方式对一个对象或数组进行序列化或反序列化有什么区别呢? 假设一个对象和一个数组: PHP 1 2 3 4$web=newstdClass; $web-> ...

  8. python3 中的Json序列化、反序列化 和 字符编码的问题解决

    python3 中的Json序列化.反序列化 和 字符编码的问题解决 参考文章: (1)python3 中的Json序列化.反序列化 和 字符编码的问题解决 (2)https://www.cnblog ...

  9. C#之json序列化与反序列化

    http://106.86.154.29:5191/jsdecoder.wasm http://106.86.154.29:5191/webgl.js http://106.86.154.29:519 ...

最新文章

  1. oracle引号的嵌套,3.4.2 在一个直接量字符串中嵌入单引号
  2. 用计算机绘制函数图象教案,信息技术应用 用计算机画函数图象教学设计(教案)...
  3. getter方法的作用 vuex_Vuex入门篇——基本使用
  4. Spreadsheet Tracking
  5. .NET Core开发的iNeuOS工业互联网平台,发布 iNeuDA 数据分析展示组件,快捷开发图形报表和数据大屏...
  6. xenserver6.2 内存leak故障处理
  7. torch tensor去掉1维_浑身是刺的“维c之王”,有人管它叫“菠萝”,有人管它叫“梨”...
  8. 搞懂多维高斯分布的由来
  9. ArrayList源码阅读
  10. MyEclipse的html页面 design视图中 关闭可视化界面
  11. C语言:从键盘输入一个正整数,将该数倒序输出。
  12. java sharepoint_java调用sharepoint webservice
  13. Dubbo中暴露服务的过程解析
  14. 云服务器与物理服务器有什么区别?
  15. Markdown 书写规范
  16. 分期利息计算——考虑免息日期和多利率设定的思路设计和代码实现
  17. ratingbar 的使用
  18. 计算机组成原理实验-logisim实现自动售糖机
  19. java基础之super关键字_繁星漫天_新浪博客
  20. 我在B站工作的30天时光,从入职到离职

热门文章

  1. 关于项目过程能力基线的几个讨论
  2. Linux环境搭建 手把手教你配置Linux虚拟机
  3. sqlserver中65535_sqlserver中 varchar 最大长度是多少?
  4. @所有人,20 万大奖待领取!【全民找“BUG”】活动,等你!
  5. vue v-model 简单使用
  6. 通过javaMail API 发送邮件
  7. 什么是MyCat?为什么要用到MyCat呢?
  8. 什么是网络套接字(Socket)?
  9. 从放弃迅雷和IDM到自己开发下载工具
  10. 软件的安装(包括yum仓库与源码包的安装)