Python JSON 文件读写详解:从基础到进阶技巧202


JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式,易于人类阅读和编写,同时也易于机器解析和生成。在 Python 中,处理 JSON 文件非常常见,无论是用于数据存储、配置文件还是与其他系统进行交互。本文将深入探讨 Python 中 JSON 文件的读写操作,涵盖基础知识、常见问题和进阶技巧。

一、必要的库:`json`

Python 内置的 `json` 模块提供了处理 JSON 数据所需的所有功能。无需安装额外的库,可以直接使用。

二、写入 JSON 文件

写入 JSON 文件主要涉及将 Python 对象(例如字典或列表)转换为 JSON 字符串,然后将该字符串写入文件。以下是一个简单的例子:```python
import json
data = {
"name": "John Doe",
"age": 30,
"city": "New York"
}
with open("", "w") as f:
(data, f, indent=4) # indent 参数用于格式化输出,使 JSON 更易读
```

这段代码将字典 `data` 转换为 JSON 字符串,并将其写入名为 "" 的文件。`indent=4` 参数使输出的 JSON 格式化,每个缩进为 4 个空格,提高了可读性。如果不需要格式化,可以省略该参数。

我们也可以写入JSON列表:```python
import json
data = [
{"name": "Alice", "age": 25},
{"name": "Bob", "age": 35}
]
with open("", "w") as f:
(data, f, indent=4)
```

三、读取 JSON 文件

读取 JSON 文件的过程是将文件内容解析为 Python 对象。使用 `()` 方法可以轻松实现:```python
import json
with open("", "r") as f:
data = (f)
print(data) # 输出读取的字典
print(data["name"]) #访问字典中的值
```

这段代码读取 "" 文件,并将 JSON 数据解析为 Python 字典 `data`。然后,您可以像访问普通字典一样访问其中的数据。

四、处理编码问题

在处理包含非 ASCII 字符的 JSON 文件时,需要指定编码方式,例如 UTF-8:```python
import json
with open("", "r", encoding="utf-8") as f:
data = (f)
```

五、处理大型 JSON 文件

对于大型 JSON 文件,逐行读取可以提高效率,避免一次性将整个文件加载到内存中。可以使用 `()` 配合迭代器来实现:
```python
import json
def read_large_json(filepath):
with open(filepath, 'r', encoding='utf-8') as f:
for line in f:
try:
yield (line)
except as e:
print(f"Error decoding JSON in line: {()}, Error: {e}")
for item in read_large_json(""):
# process each JSON object
print(item)
```

这段代码假设你的大型JSON文件每一行是一个独立的JSON对象。 如果你的大型JSON文件是一个整体的JSON对象,则此方法不适用,需要考虑使用流式JSON解析库,例如 `ijson`。

六、错误处理

在处理 JSON 文件时,可能会遇到文件不存在或 JSON 数据格式错误等问题。使用 `try-except` 块可以处理这些异常:```python
import json
try:
with open("", "r") as f:
data = (f)
except FileNotFoundError:
print("File not found.")
except as e:
print(f"Invalid JSON data: {e}")
```

七、进阶技巧:自定义编码器和解码器

对于复杂的 Python 对象,可能需要自定义编码器和解码器来处理特定的数据类型。例如,你可以自定义函数来处理日期时间对象或自定义类:```python
import json
from datetime import datetime
def custom_encoder(obj):
if isinstance(obj, datetime):
return ()
raise TypeError(f"Type {type(obj).__name__} is not JSON serializable")
data = {"timestamp": ()}
json_string = (data, default=custom_encoder)
print(json_string)
#反序列化
def custom_decoder(dct):
if 'timestamp' in dct:
return { 'timestamp': (dct['timestamp'])}
return dct
data = (json_string, object_hook=custom_decoder)
print(data)
```

通过掌握这些技巧,您可以高效地处理各种类型的 JSON 文件,并在 Python 项目中充分利用 JSON 的优势。

2025-09-13


上一篇:Python代码表演:从初级到进阶,解锁Python编程的艺术

下一篇:Python进程间共享数据:方法、挑战与最佳实践