在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'>

Python Json序列化与反序列化的更多相关文章

  1. python json序列化与反序列化操作

    python json序列化与反序列化操作 # dumps() dict-->str 序列化 # loads() str---dict 反序列化 result1 = json.dumps({'a ...

  2. python的序列化和反序列化以及json

    python 的序列化和反序列化用于内存之间的共享,包括服务器和客户端的共享,两个Python程序之间的共享,以及以字符串的形式存储到硬盘中. pyhton 的pickle 可以对Python的各种数 ...

  3. python:序列化与反序列化(json、pickle、shelve)

    本节内容 前言 json模块 pickle模块 shelve模块 总结 一.前言 1. 现实需求 每种编程语言都有各自的数据类型,其中面向对象的编程语言还允许开发者自定义数据类型(如:自定义类),Py ...

  4. Python实现JSON序列化和反序列化

    在我的应用中,序列化就是把类转成符合JSON格式的字符串,反序列化就是把JSON格式的字符串转换成类.C#的话直接用Newtonsoft.JSON就可以了,非常好用.本来以为python也会有类似的库 ...

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

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

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

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

  7. Newtonsoft.Json 序列化和反序列化 时间格式

    From : http://www.cnblogs.com/litian/p/3870975.html 1.JSON序列化 string JsonStr= JsonConvert.SerializeO ...

  8. Net中JSON序列化和反序列化处理(日期时间特殊处理)

    0  缘由 笔者最近在web api端使用Json.Net进行序列化处理,而在调用端使用DataContractSerializer进行反序列化,遇到日期时间处理反序列化不成功[备注:笔者使用Net ...

  9. Newtonsoft.Json 序列化和反序列化 时间格式 [转]

    1.JSON序列化 string JsonStr= JsonConvert.SerializeObject(Entity); eg:   A a=new A(); a.Name="Elain ...

随机推荐

  1. js 获取客户端mac地址

    js 获取客户端mac地址 javascript获取客户端网卡MAC地址和IP地址和计算机名 nodesj如何获得客户端的mac地址呢? 浏览器获取MAC地址 不限浏览器的mac地址取得的几种办法 I ...

  2. CSS的使用

    1.行内样式/内联样式 特点:在具体的HTML标签中引入CSS代码 语法:所有的HTML标签都具有一个style属性,属性值就可以使用CSS样式规则 <标签 style="CSS样式规 ...

  3. 带CookieContainer进行post

    1.获取CookieContainer ——用户登录 CookieContainer cookie = new CookieContainer(); UserLoginPost("post地 ...

  4. 【MVC】View与Control之间数据传递

    1. Controller向View传递数据 使用ViewData传递数据[弱类型,字典型ViewDataDictionary] ViewData[“Message_ViewData”] = “ He ...

  5. V4L2 subdev

    除了通过v4l2_subdev_ops结构体暴露kernel API,V4L2 sub-devices也可以被用户空间应用直接控制.v4l-subdevX的设备节点可以在/dev下被创建来直接访问su ...

  6. 走进windows编程的世界-----消息处理函数(1)

    Win32消息机制     过程驱动:程序是依照我们预先定义好的顺序运行.每运行一步,下一步都已经依照预定的顺序 继续运行,直至程序结束.     事件驱动:程序的运行顺序是无序的.某个时间点所运行的 ...

  7. ThinkPHP 的一个神秘版本 ThinkPHP 1.2

    ThinkPHP 的一个神秘版本 ThinkPHP 1.2 询问过 ThinkPHP 官网的小伙伴都知道,偶尔 ThinkPHP 故障时会出现 ThinkPHP 1.2(下次看到就截图下来). 但是我 ...

  8. netty 知识点

    Netty:异步.事件驱动的NIO(非阻塞Non-blocking IO)框架 netty 教程:http://wiki.jikexueyuan.com/project/netty-4-user-gu ...

  9. spring boot中,jar包、war包的区别

    jar包.war包 比较(表格) 项目 jar包 war包 在开发调试完成之后,可以将应用打成JAR包的形式,可以直接使用Maven插件的package命令,最终会形成一个可运行的 JAR包.我们使用 ...

  10. c# list排序的三种实现方式 (转帖)

    用了一段时间的gridview,对gridview实现的排序功能比较好奇,而且利用C#自带的排序方法只能对某一个字段进行排序,今天demo了一下,总结了三种对list排序的方法,并实现动态传递字段名对 ...