1. json模块介绍

json是python自带的操作json的模块。

python序列化为json时的数据类型转换关系:

python格式 json格式
dict(复合类型) object
list, tuple(集合类型) array
int, long, float(数值类型) number
str, unicode string
True true
False false
None null

json反序列化为python数据类型对照关系:

json格式 python格式
object dict
array list
string unicode
number(int) int, long
numer(real) float
true True
false False
null None

2. 如何使用

json库提供了几个API:

json.dumps(): 将字典序列化为json字符串

json.loads(): 将json字符串反序列化为字典

json.dump(): 将字典序列化到一个文件,是文本文件,就是相当于将序列化后的json字符串写入到一个文件

json.load(): 从文件中反序列出字典

总结: 不带s的是序列到文件或者从文件中反序列化,带s的是都在内存中操作不涉及到持久化

一个简单使用的例子如下:

#! /usr/bin/python

import json

if __name__ == '__main__':
cc = {
"name": "CC11001100",
"age": 22,
"money": 9.9,
"car": "Feng-Huang Bicycle",
"house": "祖宅",
"girl friend": None,
"hobby": "thinking..."
} # 序列化为字符串
json_string = json.dumps(cc)
print(json_string)
# 从字符串中反序列化
json_dict = json.loads(json_string)
print(json_dict) # 序列化到文件中
with open('D:/cc.json', 'w') as json_file:
json.dump(cc, json_file)
# 从文件中反序列化
with open('D:/cc.json', 'r') as json_file:
json_dict = json.load(json_file)
print(json_dict)

py对象序列化为json的时候会接受的几个参数:

indent: 即缩进量是几个空格,当需要格式化输出的时候一般设为4个空格

一个指定indent的小例子:

#! /usr/bin/python

import json

if __name__ == '__main__':
cc = {
"name": "CC11001100",
"age": 22,
"money": 9.9,
"car": "Feng-Huang Bicycle",
"house": "祖宅",
"girl friend": None,
"hobby": "thinking..."
}
print(json.dumps(cc, indent=4))

输出:

{
"name": "CC11001100",
"age": 22,
"money": 9.9,
"car": "Feng-Huang Bicycle",
"house": "\u7956\u5b85",
"girl friend": null,
"hobby": "thinking..."
}

separators: 生成的json子串所使用的分隔符,就是用来代替分隔多个k/v对的,和分隔k/v的:

一个指定了separators的小例子:

#! /usr/bin/python

import json

if __name__ == '__main__':
cc = {
"name": "CC11001100",
"age": 22,
"money": 9.9,
"car": "Feng-Huang Bicycle",
"house": "祖宅",
"girl friend": None,
"hobby": "thinking..."
}
print(json.dumps(cc, indent=4, separators=('↓', '→')))

输出:

{
"name"→"CC11001100"↓
"age"→22↓
"money"→9.9↓
"car"→"Feng-Huang Bicycle"↓
"house"→"\u7956\u5b85"↓
"girl friend"→null↓
"hobby"→"thinking..."
}

sort_keys:是否对key进行排序,目前还没感觉出有啥用

3. 自带json模块的局限性

使用自带的json模块虽然很方便,但是序列化自定义类型的时候就会抛出一个TypeError的异常:

TypeError: Object of type 'Person' is not JSON serializable

对于自定义类型的序列化,一般都是使用第三方库,当然这个是另外的内容了。

参考资料:

1. https://docs.python.org/2/library/json.html

python3之json模块使用的更多相关文章

  1. python3.7 json模块

    #!/usr/bin/env python __author__ = "lrtao2010" #python3.7 json模块 ''' 要在不同的编程语言之间传递对象,就必须把对 ...

  2. Python3之json模块

    概念: 序列化(Serialization):将对象的状态信息转换为可以存储或可以通过网络传输的过程,传输的格式可以是JSON,XML等.反序列化就是从存储区域(JSON,XML)读取反序列化对象的状 ...

  3. python3中json模块的用法

    __author__ = "JentZhang" import json user_info = {"} # 将字典转换为JSON字符串 json_str = json. ...

  4. python3.5和python3.6关于json模块的区别

    python3.5中 无法反序列化bytes数据必须decode成str才可以 >>> import json >>> a = b'{"username& ...

  5. Python 第三篇(上):python文件基础操作、json模块、lambda、map、filter、reduce和函数位置参数

    python一切皆对象,linux一切皆文件,python操作文件是很常见的O/I操作,其内置来open()函数可以完成文件的基本操作: 一:使用内置open()函数操作文件,基本语法如下: with ...

  6. 【Python3之常用模块】

    一.time 1.三种表达方式 在Python中,通常有这几种方式来表示时间: 时间戳(timestamp):通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量.命令如下 ...

  7. Python 3 中的json模块使用

    1. 概述 JSON (JavaScript Object Notation)是一种使用广泛的轻量数据格式. Python标准库中的json模块提供了JSON数据的处理功能. Python中一种非常常 ...

  8. 洗礼灵魂,修炼python(70)--爬虫篇—补充知识:json模块

    在前面的某一篇中,说完了pickle,但我相信好多朋友都不懂到底有什么用,那么到了爬虫篇,它就大有用处了,而和pickle很相似的就是JSON模块 JSON 1.简介 1)JSON(JavaScrip ...

  9. 序列化模块— json模块,pickle模块,shelve模块

    json模块 pickle模块 shelve模块 序列化——将原本的字典.列表等内容转换成一个字符串的过程就叫做序列化. # 序列化模块 # 数据类型转化成字符串的过程就是序列化 # 为了方便存储和网 ...

随机推荐

  1. QMdiArea及QMdiSubWindow实现父子窗口及布局方法

    版权声明:若无来源注明,Techie亮博客文章均为原创. 转载请以链接形式标明本文标题和地址: 本文标题:QMdiArea及QMdiSubWindow实现父子窗口及布局方法     本文地址:http ...

  2. spring mvc4 找不到静态文件js/css/html 404

    说明: http://localhost:8080 指向的目录是WEB-INF所在的目录,也就是说请求静态资源时都是从该根目录开始查找.建议将所有静态文件放到和WEB-INF同级的目录下. 以 htt ...

  3. UEditor前端配置项说明

    UEditor 的配置项分为两类:前端配置项 和 后端配置项 后端配置项具体看这个文档L:后端配置项说明 本文档介绍如何通过设置前端配置项,定制编辑器的特性,配置方法主要通过修改ueditor.con ...

  4. Halcon 笔记2 Blob分析

    1. 数组操作 2. 可视化-更新窗口 (1)单步模式-总是:则可以自动显示图像: (2)单步模式-从不:需要调用显示函数才能显示图像. (3)单步模式-清空显示:将原图清除,再显示新图 3. 图像处 ...

  5. Delphi通过ADO链接数据库及对数据库的增加,删除,修改,读取操作实例教程4

    ADO是一种程序对象,用于表示用户数据库中的数据结构和所包含的数据.ADO(ActiveXDataObjects,ActiveX数据对象)是Microsoft提出的应用程序接口(API)用以实现访问关 ...

  6. 【loj6038】「雅礼集训 2017 Day5」远行 树的直径+并查集+LCT

    题目描述 给你 $n$ 个点,支持 $m$ 次操作,每次为以下两种:连一条边,保证连完后是一棵树/森林:询问一个点能到达的最远的点与该点的距离.强制在线. $n\le 3\times 10^5$ ,$ ...

  7. 从原理上搞定编码(二)-- Web编码

    周末宅在家里睡完觉就吃饭,吃完饭接着睡觉,这日子过的实在是没劲啊.明明还有计划中的事情没有做, 为什么就是不想去做呢,这样的生活持续下去,必然会成为一个彻头彻尾的loser.上一篇写的 初识编码 ,这 ...

  8. day4 列表 增删改查 元组

    增lis=["a","b","c",5,7,4]lis.append("s")#在列表的末尾追加lis.extend(& ...

  9. liunx less 命令

    1.命令格式: less [参数]  文件 2.命令功能: less 与 more 类似,但使用 less 可以随意浏览文件,而 more 仅能向前移动,却不能向后移动,而且 less 在查看之前不会 ...

  10. 关于在springmvc下使用@RequestBody报http status 415的错误解决办法

    网上有很多原因,进行整理后主要有以下几类 springmvc添加配置.注解: pom.xml添加jackson包引用: Ajax请求时没有设置Content-Type为application/json ...