如何在 Python 中读取和解析 JSON 文件

文章目录

在 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 数据。


也可以看看