Python JSON 模块详解
一、引言
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它基于ECMAScript(欧洲计算机协会制定的js规范)的一个子集,采用完全独立于语言的文本格式来存储和表示数据。简单、清晰的层次结构使得JSON成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。
Python 提供了一个内建的 json 模块,使得在 Python 中处理 JSON 数据变得简单而高效。以下是对 Python json 模块的详细介绍。
二、Python json 模块概述
Python 的 json 模块提供了四个主要的功能:解析(Parse)、生成(Dump)、解析文件(Load)和生成文件(Dump to file)。这四个功能通过 json.loads(), json.dumps(), json.load(), 和 json.dump() 这四个函数来实现。
三、主要函数详解
1.
json.loads()
2.
json.loads() 函数用于将 JSON 格式的字符串解析成 Python 对象(如字典、列表等)。
示例代码:
python
|
import json |
|
|
|
json_str = '{"name": "John", "age": 30, "city": "New York"}' |
|
python_obj = json.loads(json_str) |
|
|
|
print(python_obj) # 输出: {'name': 'John', 'age': 30, 'city': 'New York'} |
|
print(type(python_obj)) # 输出: <class 'dict'> |
3.
4.
json.dumps()
5.
json.dumps() 函数用于将 Python 对象编码成 JSON 格式的字符串。
示例代码:
python
|
import json |
|
|
|
python_obj = { |
|
"name": "John", |
|
"age": 30, |
|
"city": "New York", |
|
"is_student": False, |
|
"scores": [88, 92, 78, 97] |
|
} |
|
|
|
json_str = json.dumps(python_obj) |
|
|
|
print(json_str) # 输出: '{"name": "John", "age": 30, "city": "New York", "is_student": false, "scores": [88, 92, 78, 97]}' |
|
print(type(json_str)) # 输出: <class 'str'> |
此外,json.dumps() 还支持许多参数来自定义输出的 JSON 字符串,例如缩进、排序等。
json.load()
json.load() 函数用于从文件对象中读取 JSON 数据,并将其解析成 Python 对象。
示例代码(假设有一个名为 data.json 的文件,内容如上例中的 json_str):
6.
python
|
import json |
|
|
|
with open('data.json', 'r') as f: |
|
python_obj = json.load(f) |
|
|
|
print(python_obj) # 输出与上面使用 json.loads() 时的结果相同 |
json.dump()
7.
json.dump() 函数用于将 Python 对象编码成 JSON 格式的字符串,并写入到文件对象中。
8.
示例代码:
python
9.
|
import json |
|
|
|
python_obj = { |
|
"name": "John", |
|
"age": 30, |
|
# ...(其他字段) |
|
} |
|
|
|
with open('output.json', 'w') as f: |
|
json.dump(python_obj, f) |
|
|
|
# 此时,'output.json' 文件中已经包含了 JSON 格式的数据 |
10.
四、注意事项
1.
数据类型转换:Python 和 JSON 之间有一些数据类型需要转换。例如,Python 中的字典类型会被转换为 JSON 对象,Python 中的列表和元组会被转换为 JSON 数组,Python 中的字符串会被转换为 JSON 字符串,Python 中的 None 会被转换为 JSON 中的 null,Python 中的布尔值 True 和 False 会被转换为 JSON 中的 true 和 false。
2.
编码问题:在读取和写入 JSON 文件时,需要注意文件的编码问题。通常,JSON 文件应该使用 UTF-8 编码。
3.
错误处理:当解析的 JSON 字符串格式不正确时,json.loads() 函数会抛出一个 JSONDecodeError 异常。因此,在使用 json.loads() 时