Python 教程

14.4 使用 json 模块处理JSON数据

Python json模块教程:轻松处理JSON数据

Python 教程

本教程详细介绍如何使用Python内置的json模块处理JSON数据,包括序列化和解析操作,提供简单示例和代码,适合初学者快速上手。

推荐工具
PyCharm专业版开发必备

功能强大的Python IDE,提供智能代码补全、代码分析、调试和测试工具,提高Python开发效率。特别适合处理列表等数据结构的开发工作。

了解更多

使用Python json模块处理JSON数据

简介

JSON(JavaScript Object Notation)是一种广泛使用的轻量级数据交换格式,易于人阅读和机器解析。Python内置了强大的json模块,让你能轻松处理JSON数据。本教程将带你从基础开始,学习如何使用json模块,即使你是编程新手也能快速掌握。

导入json模块

在Python中,处理JSON数据首先需要导入json模块。这是一个内置模块,无需额外安装。

import json

导入后,你就可以使用模块中的函数来操作JSON。

解析JSON数据

解析是指将JSON数据转换为Python对象(如字典、列表),以便在Python中使用。json模块提供了两种常用方法。

1. json.loads(): 从字符串解析

json.loads()函数用于将JSON格式的字符串转换为Python对象。例如:

import json

json_string = '{"name": "Alice", "age": 25, "city": "Shanghai"}'
# 解析字符串
python_obj = json.loads(json_string)
print(python_obj)  # 输出: {'name': 'Alice', 'age': 25, 'city': 'Shanghai'}
print(type(python_obj))  # 输出: <class 'dict'>

说明:

  • JSON字符串需要是有效的格式,否则会抛出错误。
  • 在JSON中,对象转换为Python字典,数组转换为列表,数字和字符串保持对应。

2. json.load(): 从文件解析

如果你有一个JSON文件,可以使用json.load()从文件中读取并解析。例如,假设有一个名为data.json的文件,内容如下:

{
  "users": [
    {"name": "Bob", "age": 30},
    {"name": "Charlie", "age": 22}
  ]
}

在Python中操作:

import json

with open('data.json', 'r') as file:  # 以读取模式打开文件
    data = json.load(file)  # 解析文件内容
    print(data)  # 输出: {'users': [{'name': 'Bob', 'age': 30}, {'name': 'Charlie', 'age': 22}]}

提示: 使用with open()语句确保文件正确关闭,这是处理文件的好习惯。

序列化为JSON数据

序列化是指将Python对象转换为JSON格式,以便存储或传输。json模块也提供了两种方法。

1. json.dumps(): 转换为JSON字符串

json.dumps()函数将Python对象转换为JSON格式的字符串。例如:

import json

python_dict = {"name": "Alice", "age": 25, "city": "Shanghai"}
json_string = json.dumps(python_dict)  # 序列化为字符串
print(json_string)  # 输出: {"name": "Alice", "age": 25, "city": "Shanghai"}
print(type(json_string))  # 输出: <class 'str'>

参数说明:

  • 你可以使用indent参数美化输出,例如json.dumps(python_dict, indent=4),使JSON字符串更易读。
  • 对于中文等非ASCII字符,使用ensure_ascii=False避免转义,如json.dumps(python_dict, ensure_ascii=False)

2. json.dump(): 写入JSON文件

json.dump()函数直接将Python对象写入文件。例如,将数据保存到output.json

import json

data_to_save = {"product": "Laptop", "price": 1500.0, "stock": 10}

with open('output.json', 'w') as file:  # 以写入模式打开文件
    json.dump(data_to_save, file)  # 写入数据到文件

这会在当前目录下创建一个名为output.json的文件,包含JSON格式的数据。

示例:完整处理流程

让我们通过一个例子,展示从解析到序列化的完整过程。假设我们有一个JSON字符串,解析后修改数据,然后保存为新文件。

import json

# 原始JSON字符串
json_str = '{"employees": [{"name": "John", "salary": 50000}]}'

# 步骤1: 解析为Python对象
parsed_data = json.loads(json_str)
print("原始数据:", parsed_data)  # 输出: {'employees': [{'name': 'John', 'salary': 50000}]}

# 步骤2: 修改数据(例如增加一个新员工)
new_employee = {"name": "Jane", "salary": 60000}
parsed_data["employees"].append(new_employee)
print("修改后数据:", parsed_data)  # 输出: {'employees': [{'name': 'John', 'salary': 50000}, {'name': 'Jane', 'salary': 60000}]}

# 步骤3: 序列化为JSON字符串
updated_json_str = json.dumps(parsed_data, indent=2)  # 使用indent美化输出
print("序列化后的JSON字符串:")
print(updated_json_str)

# 步骤4: 保存到文件
with open('employees.json', 'w') as f:
    json.dump(parsed_data, f, indent=2)
print("数据已保存到employees.json文件")

注意事项和最佳实践

  • 错误处理: 解析JSON时,如果格式无效(如缺少引号),会抛出json.JSONDecodeError。建议使用try-except块处理异常。

    import json
    
    json_string = '{"invalid": data}'  # 无效JSON(data未引号)
    try:
        data = json.loads(json_string)
    except json.JSONDecodeError as e:
        print(f"JSON解析错误: {e}")
    
  • 数据类型转换: JSON支持的数据类型有限(如字符串、数字、布尔值、null、数组、对象),Python中的复杂类型(如集合、日期)需要手动转换或使用额外库。

  • 性能: 对于大文件,使用json.load()json.dump()比先读取/写入字符串更高效。

总结

通过本教程,你应该已经掌握了使用Python json模块处理JSON数据的基本技能:

  • 使用json.loads()json.load()解析JSON字符串和文件。
  • 使用json.dumps()json.dump()序列化Python对象为JSON字符串和文件。

json模块简单易用,是Python中处理JSON数据的首选工具。多加练习,你就能在Web开发、数据分析和API交互等场景中游刃有余。

进一步学习

  • 了解json模块的高级特性,如自定义编码器和解码器。
  • 探索其他Python库(如requests)结合JSON处理HTTP请求。
  • 实践项目:尝试从API获取JSON数据并解析分析。

祝你学习愉快!如有问题,随时查阅Python官方文档或社区资源。

开发工具推荐
Python开发者工具包

包含虚拟环境管理、代码格式化、依赖管理、测试框架等Python开发全流程工具,提高开发效率。特别适合处理复杂数据结构和算法。

获取工具包