在 Python 开发中,JSON(JavaScript Object Notation)是用于数据交换的常见格式。无论是在 Web 开发、API 请求,还是其他数据处理场景,JSON 都广泛用于传输和存储数据。本文将详细介绍如何在 Python 中读取、解析、写入 JSON 文件,并结合示例代码帮助你快速掌握这些常用操作。

什么是 JSON?

JSON 是一种轻量级的数据交换格式,使用“键-值对”的方式来表示数据。它与 Python 的字典结构相似,常用于服务器和客户端之间的数据传输。典型的 JSON 文件格式如下:

{
  "name": "axiaoxin",
  "age": 16,
  "is_married": false,
  "profession": null,
  "hobbies": ["traveling", "coding"]
}

在日常开发中,我们经常需要从 JSON 文件中读取数据或者将 Python 对象写入 JSON 文件中。接下来,我们将分步骤讲解如何在 Python 中实现这些操作。

Python 如何读取 JSON 文件

1. 使用 open()json.load() 方法加载 JSON 文件

假设我们有一个名为 user.json 的文件,包含上述 JSON 数据。在 Python 中,最常见的做法是使用 open() 函数来打开文件,然后用 json 模块的 load() 方法来解析文件内容。具体代码如下:

import json

with open('user.json', 'r', encoding='utf-8') as user_file:
    data = json.load(user_file)

print(data)

代码解析:

  1. open('user.json', 'r'):该函数打开指定的 JSON 文件,并以只读模式读取文件内容。
  2. json.load():直接解析 JSON 文件,将其转换为 Python 字典。
  3. 使用 with 语句来确保文件在读取后自动关闭。

2. 使用 json.loads() 解析 JSON 字符串

有时,JSON 数据是以字符串形式存在的,而不是存储在文件中。在这种情况下,可以使用 json.loads() 方法将 JSON 字符串解析为 Python 字典:

import json

json_str = '{"name": "axiaoxin", "age": 16}'
data = json.loads(json_str)
print(data)

Python 如何写入 JSON 文件

在 Python 中,你可以使用 json.dump() 将 Python 对象转换为 JSON 并保存到文件中。以下是将字典写入 JSON 文件的示例:

import json

data = {
    "name": "axiaoxin",
    "age": 16,
    "is_married": False,
    "profession": None,
    "hobbies": ["traveling", "coding"]
}

with open('output.json', 'w', encoding='utf-8') as output_file:
    json.dump(data, output_file, ensure_ascii=False, indent=4)

代码解析:

  1. json.dump():将 Python 对象写入 JSON 文件。ensure_ascii=False 确保非 ASCII 字符能够正确保存,indent=4 则是为了使输出格式更加美观,添加缩进。
  2. with open('output.json', 'w'):以写模式打开文件,如果文件不存在则自动创建。

Python 如何打印格式化的 JSON 数据

有时你可能想在控制台中格式化输出 JSON 数据以便于阅读。使用 json.dumps() 方法并设置 indent 参数可以实现格式化输出:

import json

data = {
    "name": "axiaoxin",
    "age": 16,
    "hobbies": ["traveling", "coding"]
}

formatted_json = json.dumps(data, indent=4, ensure_ascii=False)
print(formatted_json)

代码解析:

  1. json.dumps():将 Python 对象转换为 JSON 格式的字符串。通过设置 indent 参数,可以让输出的 JSON 更加整齐有序。
  2. ensure_ascii=False:确保中文字符等非 ASCII 字符能够正确显示。

Python 如何读取和写入带有复杂结构的 JSON 文件

对于包含嵌套结构或多层次数据的 JSON 文件,Python 的 json 模块依旧可以很好地处理。以下是一个更复杂的 JSON 文件处理示例:

{
  "user": {
    "name": "axiaoxin",
    "profile": {
      "age": 16,
      "hobbies": ["traveling", "coding"]
    }
  }
}

使用 Python 可以轻松读取其中的嵌套数据:

import json

with open('complex_user.json', 'r', encoding='utf-8') as file:
    data = json.load(file)

# 访问嵌套的字典
print(data['user']['profile']['hobbies'])

常见问题与解答

1. 如何处理大型 JSON 文件?

对于非常大的 JSON 文件,可以通过逐行读取的方式来减少内存占用。你可以结合生成器和 json.load() 的方式来逐行处理 JSON 数据:

import json

def process_large_json(file_path):
    with open(file_path, 'r', encoding='utf-8') as file:
        for line in file:
            data = json.loads(line)
            # 对每行 JSON 数据进行处理
            print(data)

2. 如何处理 JSON 格式错误?

如果 JSON 文件格式不正确(例如缺少引号或逗号),Python 会抛出 json.JSONDecodeError 错误。你可以使用 try-except 块来捕获并处理这些错误:

import json

try:
    with open('user.json', 'r', encoding='utf-8') as file:
        data = json.load(file)
except json.JSONDecodeError as e:
    print(f"JSON 解码错误: {e}")

3. 如何将 Python 字典转换为 JSON?

你可以使用 json.dumps() 将 Python 字典或其他对象转换为 JSON 格式的字符串:

import json

data = {"name": "axiaoxin", "age": 16}
json_str = json.dumps(data, ensure_ascii=False)
print(json_str)

小结

JSON 是 Python 中常用的数据格式之一,广泛应用于文件存储和数据传输。无论是读取、解析、写入还是格式化 JSON,Python 的 json 模块提供了简单易用的解决方案。通过本文的示例,你可以轻松地在项目中处理 JSON 文件,并根据不同需求灵活地操作 JSON 数据。


也可以看看