1. 序列化的简单概念

2. json 标准库

2.1 json.dumps()

2.2 json.loads()

2.3 json.dump()

2.4 json.load()

1. 序列化的简单概念

我们平常对 python 对象所进行的操作是在内存中的,当程序关闭时这些对象就会被清空,所以我们需要用一种合适的方法将这些数据保存下来。

为了将我们的数据进行永久存储,需要引入序列化(pickling/serialization)的概念。

  • 序列化的定义:将 python 对象编码成一个二进制数据集合(数据流);反序列化:将数据流解码成 python 对象。
  • 序列化的好处:我们可以通过网络或本地存储介质将这些数据流进行传输或保存。
  • 序列化的方法:引入 json、pickling、marshal、shelve 等,其中最常用的是 json。

2. json 标准库

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写。

基本用法

序列化方法

  • json.dumps():处理的是python对象,将 python 对象序列化为 json 字符串。
  • json.dump():处理的是文件对象,将序列化后的 json 字串保存到文件。

反序列化方法

  • json.loads():处理的是python对象,将已编码的 json 字符串反序列为 python 对象。
  • json.load():处理的是文件对象,从文件接收 json 字串并反序列化为 python 对象。

  

2.1 json.dumps()

将 python 对象编码(序列化)成 json 字符串。

语法

json.dumps(obj, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, 
  indent=None, separators=None, encoding="utf-8", default=None, sort_keys=False, **kw)

较重要的参数:

  • sort_keys:是否按键排序
  • indent:定义缩进大小
  • separators:是一个元组,定义分隔符的类型(键之间的分隔符, 键值之间的分隔符)
  • skipkeys:是否允许json字串编码字典对象时,字典的key不是字符串类型(默认是不允许)

示例:

1 >>> import json
2 >>> json.dumps({"name":"xiaoming", "age": 18}) # 将字典对象编码成json串(即字符串类型)
3 '{"name": "xiaoming", "age": 18}'
4 >>> json.dumps([]) # 将列表对象编码成json串
5 '[]'
6 >>> json.dumps("string") # 将字符串对象编码成json串
7 '"string"'
8 >>> json.dumps(1) # 将数字对象编码成json串
9 '1'

使用参数让 json 数据格式化输出

示例1:

1 >>> print(json.dumps({'b': 'Runoob', 'a': 7}, sort_keys=True, indent=4, separators=(',', ': ')))
2 {
3 "a": 7,
4 "b": "Runoob"
5 }

示例2:

 1 >>> a = ['foo', {'bar': ('baz', None, 1.0, 2)}]
2 >>> print(json.dumps(a, sort_keys=True, indent=4, separators=('!', '?'))) # 分隔符这里只是测试,一般保持默认逗号和分号即可
3 [
4 "foo"!
5 {
6 "bar"?[
7 "baz"!
8 null!
9 1.0!
10 2
11 ]
12 }
13 ]

Python 原始类型向 JSON 类型的转化对照表

Python JSON
dict object
list, tuple array
str, unicode string
int, long, float number
True true
False false
None null

示例:

 1 # 字典对象转json串
2 >>> data = {'b':None, 'c':(1,2), 'a':True, 'd':1.221}
3 >>> json_data = json.dumps(data)
4 >>> print(json_data)
5 {"b": null, "c": [1, 2], "a": true, "d": 1.221}
6
7 # json串转回字典对象
8 >>> dict_data = json.loads(json_data)
9 >>> print(dict_data)
10 {'b': None, 'c': [1, 2], 'a': True, 'd': 1.221}

2.2 json.loads()

将 json 字串解码成 python 的数据类型,也就是反序列化。

语法

json.loads(s[, encoding[, cls[, object_hook[, parse_float[, parse_int[, parse_constant[, object_pairs_hook[, **kw]]]]]]]])

示例

1 >>> import json
2 >>> jsonData = '{"a":1,"b":2,"c":3,"d":4,"e":5}'
3 >>> type(jsonData)
4 <class 'str'>
5 >>> rep = json.loads(jsonData)
6 >>> rep
7 {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5}
8 >>> type(rep)
9 <class 'dict'>

JSON 类型转换到 Python 的类型对照表

JSON Python
object dict
array list
string unicode
number (int) int, long
number (real) float
true True
false False
null None

2.3 json.dump()

将序列化之后的JSON字串保存到文件中。

json.dump(obj, fp, skipkeys=False, ensure_ascii=True, check_circular=True, 
  allow_nan=True, cls=None, indent=None, separators=None, default=None, sort_keys=False, **kw)

示例:

 1 import json
2
3 data = {"name":"xiaoming", "age":21, "gender":"boy"}
4
5 # 第一种方法:使用json.dumps()
6 with open("e:\\json1.txt", "w") as f:
7 f.write(json.dumps(data, indent=4))
8
9 # 第二种方法:使用json.dump()
10 with open("e:\\json2.txt", "w") as f:
11 json.dump(data, f, indent=4)

执行结果(文件内容):

{
"name": "xiaoming",
"age": 21,
"gender": "boy"
}

2.4 json.load()

从文件中接收 JSON 串,并反序列化为 Python 的数据类型。

json.load(fp, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)

示例:

 1 import json
2
3 data = {"name":"xiaoming", "age":21, "gender":"boy"}
4
5 # 将json串写入文件中
6 with open("e:\\json3.txt", "w") as f:
7 json.dump(data, f, indent=4)
8
9 ## 读取json串
10
11 # 方法1:json.loads()
12 with open("e:\\json3.txt", "r") as f:
13 print(json.loads(f.read()))
14
15 # 方法2:json.load(open())
16 print(json.load(open("e:\\json3.txt")))
17
18 # 方法3:json.load() + with open()
19 with open("e:\\json3.txt") as f:
20 print(json.load(f))

json 标准库的更多相关文章

  1. golang中的标准库数据格式

    数据格式介绍 是系统中数据交互不可缺少的内容 这里主要介绍JSON.XML.MSGPack JSON json是完全独立于语言的文本格式,是k-v的形式 name:zs 应用场景:前后端交互,系统间数 ...

  2. Python常用标准库(pickle序列化和JSON序列化)

    常用的标准库 序列化模块 import pickle 序列化和反序列化 把不能直接存储的数据变得可存储,这个过程叫做序列化.把文件中的数据拿出来,回复称原来的数据类型,这个过程叫做反序列化. 在文件中 ...

  3. Python 标准库 urllib2 的使用细节[转]

    转自[http://zhuoqiang.me/python-urllib2-usage.html] Python 标准库中有很多实用的工具类,但是在具体使用时,标准库文档上对使用细节描述的并不清楚,比 ...

  4. Python标准库与第三方库详解(转载)

    转载地址: http://www.codeweblog.com/python%e6%a0%87%e5%87%86%e5%ba%93%e4%b8%8e%e7%ac%ac%e4%b8%89%e6%96%b ...

  5. Python 标准库 urllib2 的使用细节

    刚好用到,这篇文章写得不错,转过来收藏.    转载自 道可道 | Python 标准库 urllib2 的使用细节 Python 标准库中有很多实用的工具类,但是在具体使用时,标准库文档上对使用细节 ...

  6. 完成OSS.Http底层HttpClient重构封装 支持标准库

    OSS.Http项目对于.Net Standard标准库的支持已经迁移完毕,OSS开源系列两个最底层的类库已经具备跨运行时支持的能力.由于OSS.Http类库是几年前我参照RestSharp的思路,完 ...

  7. 微信和支付宝支付模式详解及实现(.Net标准库)- OSS开源系列

    支付基本上是很多产品都必须的一个模块,大家最熟悉的应该就是微信和支付宝支付了,不过更多的可能还是停留在直接sdk的调用上,甚至和业务系统高度耦合,网上也存在各种解决方案,但大多形式各异,东拼西凑而成. ...

  8. [python标准库]Pickle模块

    Pickle-------python对象序列化 本文主要阐述以下几点: 1.pickle模块简介 2.pickle模块提供的方法 3.注意事项 4.实例解析 1.pickle模块简介 The pic ...

  9. python 标准库 -- requests

    一. 安装 $ pip install requests requests 并不是python 标准库, 但为了汇总方便, 将其放置于此. 二. 用法 requests.get() : GET 请求 ...

随机推荐

  1. 通过const app = getApp()实现在 page 页面获取 app.js 定义的属性globalData,即获取全局数据

    App.js是项目的入口文件,页面的 page.js 文件会覆盖 app.js文件, App.js文件里面的一些方法: onLaunch : function(){}:这个方法是当小程序加载完毕后就执 ...

  2. <span>居中

    在父元素中加style="text-align:center"; 比如下面这样 <head> </head> <body>     <di ...

  3. CentOS7安装ElasticSearch7.9.2

    1:下载 wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.9.2-linux-x86_64.tar. ...

  4. Django的视图层和模板层

    目录 一.视图层 1. 小白必会三板斧 2. JsonResponse 3. FBV与CBV 3.1 FVB 3.2 CBV 4. CBV的源码 5. 给CBV加装饰器 二.模板层 1. 模板语法 2 ...

  5. Java 学习阶段性感想

    阶段性感想·操千曲而后晓声 回顾 从2月17日 到 今天 4月19日,我算是暂时完成了Java入门的学习了. 从基本语法到面向对象,从常见API到字符串集合,从文件处理到多线程,我学到了很多,很多很多 ...

  6. 在C++中实现aligned_malloc

    malloc的默认行为 大家都知道C++中可以直接调用malloc请求内存被返回分配成功的内存指针,该指针指向的地址就是分配得到的内存的起始地址.比如下面的代码 int main() { void * ...

  7. C# 应用 - 使用 HttpClient 发起 Http 请求

    1. 需要的库类 \Reference Assemblies\Microsoft\Framework\.NETFramework\v4.7.2\System.Net.Http.dll System.N ...

  8. 《Selenium自动化测试实战:基于Python》Selenium自动化测试框架入门

    第1章  Selenium自动化测试框架入门 1.1  Selenium自动化测试框架概述 说到目前流行的自动化测试工具,相信只要做过软件测试相关工作,就一定听说过Selenium. 图1-1是某企业 ...

  9. java例题_13 加上100再加上168的完全平方数问题

    1 /*13 [程序 13 根据条件求数字] 2 题目:一个整数,它加上 100 后是一个完全平方数,再加上 268 又是一个完全平方数,请问该数是多少? 3 程序分析:在 10万以内判断,先将该数加 ...

  10. Spring Boot 轻量替代框架 Solon 1.3.15 发布

    Solon 是一个微型的Java开发框架.项目从2018年启动以来,参考过大量前人作品:历时两年,4000多次的commit:内核保持0.1m的身材,超高的跑分,良好的使用体验.支持:RPC.REST ...