json 标准库
1. 序列化的简单概念
2. json 标准库
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 标准库的更多相关文章
- golang中的标准库数据格式
数据格式介绍 是系统中数据交互不可缺少的内容 这里主要介绍JSON.XML.MSGPack JSON json是完全独立于语言的文本格式,是k-v的形式 name:zs 应用场景:前后端交互,系统间数 ...
- Python常用标准库(pickle序列化和JSON序列化)
常用的标准库 序列化模块 import pickle 序列化和反序列化 把不能直接存储的数据变得可存储,这个过程叫做序列化.把文件中的数据拿出来,回复称原来的数据类型,这个过程叫做反序列化. 在文件中 ...
- Python 标准库 urllib2 的使用细节[转]
转自[http://zhuoqiang.me/python-urllib2-usage.html] Python 标准库中有很多实用的工具类,但是在具体使用时,标准库文档上对使用细节描述的并不清楚,比 ...
- 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 ...
- Python 标准库 urllib2 的使用细节
刚好用到,这篇文章写得不错,转过来收藏. 转载自 道可道 | Python 标准库 urllib2 的使用细节 Python 标准库中有很多实用的工具类,但是在具体使用时,标准库文档上对使用细节 ...
- 完成OSS.Http底层HttpClient重构封装 支持标准库
OSS.Http项目对于.Net Standard标准库的支持已经迁移完毕,OSS开源系列两个最底层的类库已经具备跨运行时支持的能力.由于OSS.Http类库是几年前我参照RestSharp的思路,完 ...
- 微信和支付宝支付模式详解及实现(.Net标准库)- OSS开源系列
支付基本上是很多产品都必须的一个模块,大家最熟悉的应该就是微信和支付宝支付了,不过更多的可能还是停留在直接sdk的调用上,甚至和业务系统高度耦合,网上也存在各种解决方案,但大多形式各异,东拼西凑而成. ...
- [python标准库]Pickle模块
Pickle-------python对象序列化 本文主要阐述以下几点: 1.pickle模块简介 2.pickle模块提供的方法 3.注意事项 4.实例解析 1.pickle模块简介 The pic ...
- python 标准库 -- requests
一. 安装 $ pip install requests requests 并不是python 标准库, 但为了汇总方便, 将其放置于此. 二. 用法 requests.get() : GET 请求 ...
随机推荐
- Django Admin 后台Admin继承UserAdmin增加用户密码不显示明文和用户登录不了的解决方法
Django后台Admin继承UserAdmin增加用户不显示明文方法 1.在 models.py 中用户表 # 导包规范-1.Python标准模块 from django.db import mod ...
- Js和JQuery基础
1.JavaScript的组成 CMAScript (核心):规定了JS的语法和基本对象 DOM 文档对象模型:处理网页内容的方法和接口 BOM 浏览器对象模型:与浏览器交互的方法和接口 2.Java ...
- Oracle数据库配置监听程序
最近在学习Oracle数据库,从安装到配置监听程序基本靠百度... 不得不说百度真的很nice!!! 下面是我的Oracle服务端(PL/SQL Developer)出现的监听程序的问题及我解决的方法 ...
- Java基本概念:内部类
一.简介 描述: 很多时候我们创建类的对象的时候并不需要使用很多次,每次只使用一次,这个时候我们就可以使用内部类了. 内部类不是在一个java源文件中编写两个平行的类,而是在一个类的内部再定义另外一个 ...
- molloc堆区的动态内存分配
[前言]前面有一篇文章介绍了堆区栈区的区别.栈区的核心主要集中在操作一个栈结构,一般由操作系统维护.堆区,主要是我们程序员来维护,核心就是动态内存分配. 这篇笔记结束就不在高新CSAPP的读书笔记了, ...
- 在Windows服务中添加定时器
创建windows服务: 在VisualStudio中用C#创建一个Windows服务,微软MSDN参考地址: http://msdn.microsoft.com/zh-cn/library/zt39 ...
- secure 审计暴力登陆
文件路径 cd /var/log -rw------- 1 root root 1200063 Aug 10 20:04 secure 做应急响应,或者做脚本监控的时候,都可以参考如下特征 ... A ...
- 微信小程序 下拉刷新 上拉加载
1.下拉刷新 小程序页面集成了下拉功能,并提供了接口,我们只需要一些配置就可以拿到事件的回调. 1. 需要在 .json 文件中配置. 如果配置在app.json文件中,那么整个程序都可以下拉刷新. ...
- 进阶宝典一|SqlServer数据库自动备份设置
很多人都没机会接触到数据库备份,经常操作的要么是数据库管理员,要么是项目负责人.那是不是说数据库备份就不用学了? 不,其实作为开发人员应该要了解数据备份,数据备份的手段有很多:软件备份.脚本备份.其他 ...
- Hi3559AV100 NNIE开发(3)RuyiStudio软件 .wk文件生成过程-mobilefacenet.cfg的参数配置
之后随笔将更多笔墨着重于NNIE开发系列,下文是关于Hi3559AV100 NNIE开发(3)RuyiStudio软件 .wk文件生成过程-mobilefacenet.cfg的参数配置,目前项目需要对 ...