Python 进阶(九):JSON 基本操作
1. 概述
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它具有简洁、清晰的层次结构,易于阅读和编写,还可以有效的提升网络传输效率。Python 标准库的 json 模块可以用来处理 JSON 格式数据的基本操作。
2. 使用
json 模块主要提供了 dump、dumps、load、loads 方法对 JSON 数据进行编解码。
2.1 dumps
json 模块的 dumps 方法可以将 Python 对象转为 JSON 格式字符串,以字典格式为例,看个示例:
import json
d = {'id':'001', 'name':'张三', 'age':'20'}
j = json.dumps(d, ensure_ascii=False)
print(j)
执行结果:
{"id": "001", "name": "张三", "age": "20"}
我们发现上面的输出结果并不是格式化的 JSON,dumps 方法还可以对数据进行格式化,如下所示:
import json
d = {'id':'001', 'name':'张三', 'age':'20'}
j = json.dumps(d, ensure_ascii=False, sort_keys=True, indent=4, separators=(',', ': '))
print(j)
执行结果:
{
"age": "20",
"id": "001",
"name": "张三"
}
当然,除了字典类型外,其他一些 Python 类型也可转成 JSON 格式的字符串,它们之间有对应关系如下所示:
Python |
JSON |
---|---|
dict |
object |
list, tuple |
array |
str |
string |
iint, float, int 和 float 派生的枚举 |
number |
True |
true |
False |
false |
None |
null |
再来看一下如何将 JSON 数据写入文件:
import json
d = {'id':'001', 'name':'张三', 'age':'20'}
j = json.dumps(d, ensure_ascii=False, sort_keys=True, indent=4, separators=(',', ': '))
with open('test.json', 'w', encoding='utf-8') as f:
f.write(j)
2.2 dump
json 模块的 dump 方法可以将 Python 对象序列化为 JSON 格式化流形式的文件类对象。
如果我们需要将数据写到文件里的时候,dump 方法会比 dumps 方法方便一点,看一下示例:
import json
d = {'id':'001', 'name':'张三', 'age':'20'}
with open('test.json', 'w', encoding='utf-8') as f:
json.dump(d, f, indent=4, ensure_ascii=False)
如果我们需要的数据格式为 JSON 格式字符串时,比如:将数据存入数据库,这时则需要用 dumps 方法。
2.3 loads
json 模块的 loads 方法可以将 JSON 格式数据转为 Python 对象,看个示例:
import json
j = '{"id":"001", "name":"张三", "age":"20"}'
d = json.loads(j)
print(d)
执行结果:
{'id': '001', 'name': '张三', 'age': '20'}
两者之间转换的对应关系如下所示:
JSON |
Python |
---|---|
object |
dict |
array |
list |
string |
str |
number (int) |
int |
number (real) |
float |
true |
True |
false |
False |
null |
None |
我们再来读取一下之前生成的 test.json 中数据并将其转为 Python 对象,如下所示:
import json
with open('test.json', encoding='utf-8') as f:
data = f.read()
print(json.loads(data))
执行结果:
{'id': '001', 'name': '张三', 'age': '20'}
2.4 load
json 模块的 load 方法将文件类对象转为 Python 对象,看个示例:
import json
with open('test.json', encoding='utf-8') as f:
print(json.load(f))
执行结果:
{'id': '001', 'name': '张三', 'age': '20'}
我们可以看出 load 方法传的参数是文件对象,而 loads 方法参数传的是字符串。
- CMS漏洞检测工具 - CMSmap
- 基因组分析中多物种同源基因的鉴定和筛选
- SpringMVC类型转换器、属性编辑器PropertiesEditor源码分析CustomDateEditor源码分析TypeConverterDelegate源码分析
- Intellij IDEA 插件开发之自建插件仓库
- 空Word文档附件:绕过垃圾邮件过滤的新方法
- SpringMVC基本使用关于DisptacherServlet关于ServletContainerInitializer最简单配置接收参数路径变量表单变量
- 测序数据可视化 (一)
- Android log日志
- Activity的生命周期
- GitHub无法访问或访问缓慢解决办法
- 我用 Python 爬取了全国 4500 个热门景点,告诉你国庆哪里去不得?
- Fragment添加、删除、替换
- spring整合hibernate
- Android应用程序中应用图标和名字的设置
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- PHP入门之数组
- PHP基础之排序
- 关于mysql limit offset的一点优化
- PHP基础之查找
- PHP木马免杀的一些总结
- PHP基础之面向对象篇
- PHP变量覆盖漏洞小结
- 算法复习 : 插入排序原理,记忆,时间复杂度 (7行java实现)
- PHP代码审计01之in_array()函数缺陷
- 分治思想 : 并归排序与其时间复杂度
- java Spring系列之 配置文件的操作 +Bean的生命周期+不同数据类型的注入简析+注入的原理详解+配置文件中不同标签体的使用方式
- 算法系列1 初识算法 算法复杂性模型 算法复杂度的计算
- 树莓派基础实验32:DS1302实时时钟模块实验
- Failed to parse date ["1534467411000"]:Invalid time zone indicator '0'
- 快速排序 : 调优:3亿数据40秒,2亿数据30秒,1亿数据15秒