python学习-处理JSON数据
本文介绍
Python
中如何处理JSON
格式数据,包括 JSON 的基本结构和数据类型,Python 和 JSON 数据的互转和处理,以及文件读写等操作。供自己以后查漏补缺,也欢迎同道朋友交流学习。
引言
之前介绍过 CSV
这种表格类型数据,但在很多时候我们还会处理字典类型数据,尤其是 JSON
格式的数据,这也是我们前端最熟悉的一种格式了。
下面我们学习下 Python
中如何处理 JSON
格式数据,包括 JSON 的基本结构和数据类型,Python 和 JSON 数据的互转和处理,以及文件读写等操作。
JSON简介
JSON(JavaScript Object Notation
)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。
它基于 JavaScript
的一个子集,但是 JSON 是独立于语言的文本格式,许多编程语言都支持 JSON 格式的数据交换。
基本结构和数据类型
- 对象:JSON 对象是一个无序的键值对集合,类似于 Python 中的字典。它由花括号
{}
包围,键值对之间用逗号,
分隔。 - 数组:JSON 数组是值的有序集合,类似于Python中的列表。它由方括号
[]
包围,值之间用逗号,
分隔。 - 字符串:JSON 中的字符串必须用双引号
"
括起来,可以包含字母、数字、特殊字符等。 - 数字:JSON 中的数字表示为标准的浮点数或整数。
- 布尔值:JSON 中的布尔值只有两个:
true
和false
。 - null:JSON 中的
null
表示一个空值或无值。
JSON的语法规则
- 双引号:JSON中的字符串和键必须用双引号
"
括起来。 - 逗号分隔:对象中的键值对和数组中的值必须用逗号
,
分隔。 - 花括号和方括号:对象用花括号
{}
表示,数组用方括号[]
表示。 - 转义字符:特殊字符如引号、反斜杠等需要使用反斜杠
\
进行转义。 - 空白字符:JSON中允许使用空白字符(空格、制表符、换行符)来增加可读性,但它们不影响JSON的解析。
Python中JSON模块介绍
序列化(编码)
将 Python
对象转换成 JSON
字符串
- json.dumps():将 Python 对象序列化成 JSON 格式的字符串。
- json.dump():将 Python 对象直接序列化并
写入
到一个文件中。
反序列化(解码)
将 JSON
字符串转换成 Python
对象
- json.loads():将 JSON 格式的字符串反序列化成 Python 对象。
- json.load():从文件中
读取
JSON 格式的数据,并将其反序列化成 Python 对象。
处理JSON数据
- json.JSONEncoder:定制 JSON
编码器
,允许你控制如何将 Python 对象转换成 JSON。 - json.JSONDecoder:定制 JSON
解码器
,允许你控制如何将 JSON 字符串解析成 Python 对象。
异常处理
- json.JSONDecodeError:当 JSON 解码过程中遇到错误时抛出的
异常
。
Python转成JSON
使用 json.dumps()
方法,是将 Python
对象转换成 JSON
格式字符串的常用方法。
import json
# 定义一个字典
data = {
"name": "张三",
"age": 25,
"city": "北京",
"hobbies": ["篮球", "足球", "游泳"],
"is_student": True,
}
# 将字典转换为JSON
print(json.dumps(data, ensure_ascii=False))
# 输出:{"name": "张三", "age": 25, "city": "北京", "hobbies": ["篮球", "足球", "游泳"], "is_student": true}
# 将列表转为JSON(元组也是一样的效果)
print(json.dumps(data.get("hobbies"), ensure_ascii=False))
# 输出:["篮球", "足球", "游泳"]
# 将字符串转为JSON
print(json.dumps(data.get("name"), ensure_ascii=False))
# 输出:"张三"
# 将数字转为JSON(整型和浮点型是一样效果)
print(json.dumps(data.get("age")))
# 输出:25
# 将布尔值转为JSON
print(json.dumps(data.get("is_student")))
# 输出:true
# 将None转为JSON
print(json.dumps(None))
# 输出:null
json.dumps()的参数
参数 | 描述 |
---|---|
skipkeys | 默认为 False 。如果为 True,则 dict 的键 为非字符串类型时不抛出 TypeError,而是跳过该键值对。 |
ensure_ascii | 默认为 True 。如果为 False,则输出的字符串可以包含非 ASCII 字符。 |
check_circular | 默认为 True 。如果为 True,则会检查对象中是否存在循环引用,并在存在时抛出 ValueError 。 |
allow_nan | 默认为 True 。如果为 True,则 NaN 和 Infinity 会被序列化为它们的字符串表示。 |
cls | 指定一个自定义的 JSONEncoder 子类来处理编码。 |
indent | 用于美化输出的整数 或字符串 。如果为 None ,则输出的字符串不会格式化 。如果为非负整数,则每个层级缩进该数量的空格。如果为字符串,则使用该字符串进行缩进。 |
separators | 用于指定分隔符的元组。默认为(',', ': ') ,可以设置为(',', ':') 来减少输出的空格。 |
default | 一个函数 ,用于处理无法被直接序列化的类型。 |
sort_keys | 默认为 False 。如果为True,则会按照键的字典序排序后输出。 |
JSON转成Python
使用 json.loads()
方法将 JSON
格式的字符串反序列化为 Python
对象。
import json
json_str = '{"name": "张三", "age": 25, "city": "北京"}'
# 转成Python字典
data = json.loads(json_str)
# 输出字典
print(data)
# 输出:{'name': '张三', 'age': 25, 'city': '北京'}
# 转换为Python列表
json_string = '[1, 2, 3, "Python"]'
python_list = json.loads(json_string)
print(python_list)
# 输出:[1, 2, 3, 'Python']
# 转换为Python字符串
json_string = '"Hello, World!"'
python_string = json.loads(json_string)
print(python_string)
# 输出:Hello, World!
# 转换为Python整数或浮点数
json_string = '100'
python_int = json.loads(json_string)
print(python_int)
# 输出:100
json_string = '3.14'
python_float = json.loads(json_string)
print(python_float)
# 输出:3.14
# 转换为Python布尔值
json_string = 'true'
python_bool = json.loads(json_string)
print(python_bool)
# 输出:True
json_string = 'false'
python_bool = json.loads(json_string)
print(python_bool)
# 输出:False
# 转换为Python的None
json_string = 'null'
python_none = json.loads(json_string)
print(python_none)
# 输出:None
json.loads()的参数
参数 | 描述 |
---|---|
cls | 指定一个自定义的 JSONDecoder 子类来处理解码。 |
object_hook | 一个可调用的函数,用于转换解码 后的对象。该函数的参数是一个字典,返回值也会被用作最终的解码结果。 |
parse_float | 一个函数,用于解析 JSON数字 。默认情况下,会将数字解析为 Python 的 int 或 float。 |
parse_int | 一个函数,用于解析 JSON整数 。默认情况下,会将整数解析为 Python 的 int。 |
strict | 默认为 True 。如果为 False,则允许一些非标准的 JSON 编码,例如单引号包围的字符串。 |
object_pairs_hook | 一个可调用的函数,用于处理 JSON 对象中的键值对列表。该函数的参数是一个键值对列表,返回值会被用作最终的解码结果。 |
写入JSON文件
使用 json.dump()
方法将 Python 对象写入文件
。
import json
# 定义一个字典
data = {
"name": "张三",
"age": 25,
"city": "北京",
"hobbies": ["篮球", "足球", "游泳"],
"is_student": True,
}
with open('json-1.json', 'w') as file:
json.dump(data, file, ensure_ascii=False, indent=4)
读取JSON文件
使用 json.load()
方法从文件中读取 JSON 数据
。
import json
with open('json-1.json', 'r') as file:
data = json.load(file)
print(data)
# 输出:{'name': '张三', 'age': 25, 'city': '北京', 'hobbies': ['篮球', '足球', '游泳'], 'is_student': True}
python学习专栏系列
- python学习-基础学习1
- python学习-基础学习2
- python学习-基础学习3
- python学习-面向对象编程1
- python学习-面向对象编程2
- python学习-文件读写
- python学习-程序异常处理
- python学习-正则
- python学习-处理word文档
- python学习-处理pdf文档
- python学习-处理excel文档
- python学习-处理csv文档
- python学习-使用matplotlib绘制图表
- python学习-处理JSON数据
- python学习-SQLite数据库
- python学习-多线程处理
- python学习-网络爬虫