Python使用json模块读取和写入JSON数据

 更新时间:2025年03月06日 09:48:18   作者:莫比乌斯之梦  
Python 提供了内置的 json 模块,使得我们可以方便地解析 JSON 数据(读取)和生成 JSON 数据(写入),下面小编就来为大家介绍一下具体的操作步骤吧

在现代软件开发中,JSON(JavaScript Object Notation) 已成为最流行的数据交换格式之一。Python 提供了内置的 json 模块,使得我们可以方便地解析 JSON 数据(读取)和生成 JSON 数据(写入)。无论是 Web API 交互、配置文件存储,还是数据序列化,json 模块都是不可或缺的工具。本文将详细介绍 json 模块的读取、写入、格式化、编码解码等操作,并结合实际案例展示其应用。

1. JSON 与 Python 数据类型的映射关系

Python 的 json 模块可以在 Python 基本数据类型和 JSON 数据类型之间相互转换,映射关系如下:

Python 类型JSON 类型示例
dictobject{"name": "Alice", "age": 25}
list / tuplearray["apple", "banana", "cherry"]
strstring"hello"
int / floatnumber42, 3.14
booltrue / falsetrue, false
Nonenullnull

2. 读取 JSON 数据

Python 可以从字符串或文件中读取 JSON 数据。

2.1 从 JSON 字符串解析

import json

json_str = '{"name": "Alice", "age": 25, "city": "New York"}'

# 将 JSON 字符串转换为 Python 字典
data = json.loads(json_str)

print(data["name"])  # 输出: Alice
print(type(data))    # 输出: <class 'dict'>

json.loads() 作用:

  • 输入:JSON 格式的字符串。
  • 输出:转换为 Python dict 对象。

2.2 从 JSON 文件读取

假设有一个 data.json 文件:

{
    "name": "Bob",
    "age": 30,
    "skills": ["Python", "Java", "C++"]
}

使用 json.load() 读取文件:

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

print(data["name"])   # 输出: Bob
print(data["skills"]) # 输出: ['Python', 'Java', 'C++']

json.load() 作用:

  • 输入:JSON 文件对象。
  • 输出:Python dict 对象。

3. 写入 JSON 数据

Python 可以将数据写入字符串或文件。

3.1 将 Python 对象转换为 JSON 字符串

import json

data = {
    "name": "Charlie",
    "age": 28,
    "city": "San Francisco"
}

# 将 Python 字典转换为 JSON 字符串
json_str = json.dumps(data)

print(json_str)
print(type(json_str))  # 输出: <class 'str'>

json.dumps() 作用:

  • 输入:Python dict、list、str 等。
  • 输出:JSON 格式的字符串。

3.2 将 Python 对象写入 JSON 文件

import json

data = {
    "name": "David",
    "age": 35,
    "languages": ["Python", "Go", "Rust"]
}

# 写入 JSON 文件
with open("output.json", "w", encoding="utf-8") as file:
    json.dump(data, file)

print("数据已写入 output.json")

json.dump() 作用:

  • 输入:Python dict(或其他可序列化对象)。
  • 输出:写入 JSON 文件。

4. JSON 格式化输出(缩进、排序)

默认情况下,JSON 生成的字符串是紧凑的,不易阅读:

data = {"name": "Eve", "age": 26, "city": "Paris"}
json_str = json.dumps(data)

print(json_str)  # 输出: {"name": "Eve", "age": 26, "city": "Paris"}

为了更清晰地输出 JSON,可以使用 indent 参数:

json_str = json.dumps(data, indent=4)
print(json_str)

输出(格式化 JSON):

{
    "name": "Eve",
    "age": 26,
    "city": "Paris"
}

如果希望按键名排序:

json_str = json.dumps(data, indent=4, sort_keys=True)
print(json_str)

输出(按键排序):

{
    "age": 26,
    "city": "Paris",
    "name": "Eve"
}

5. 处理 JSON 编码与解码(对象序列化)

如果 JSON 数据包含自定义对象,默认 json.dumps() 无法处理:

import json
from datetime import datetime

data = {"name": "Alice", "time": datetime.now()}

# 会报错:Object of type datetime is not JSON serializable
json_str = json.dumps(data)

可以使用 default 参数,将 datetime 对象转换为字符串:

def json_serial(obj):
    if isinstance(obj, datetime):
        return obj.isoformat()  # 转换为 ISO 8601 时间格式
    raise TypeError("Type not serializable")

json_str = json.dumps(data, default=json_serial, indent=4)
print(json_str)

示例输出:

{
    "name": "Alice",
    "time": "2024-02-04T14:00:00.123456"
}

6. 处理 JSON 解析错误

解析 JSON 时,可能会遇到格式错误:

import json

invalid_json = '{"name": "Tom", "age": 30,}'  # 末尾多了逗号

try:
    data = json.loads(invalid_json)
except json.JSONDecodeError as e:
    print(f"JSON 解析错误: {e}")

输出:

JSON 解析错误: Expecting property name enclosed in double quotes

7. JSON 读写的最佳实践

读取 JSON 时使用 try-except 捕获异常

try:
    with open("config.json", "r", encoding="utf-8") as file:
        config = json.load(file)
except (FileNotFoundError, json.JSONDecodeError) as e:
    print(f"错误: {e}")

写入 JSON 时使用 indent=4 让数据更易读

json.dump(data, file, indent=4)

处理非标准数据类型时,使用 default 进行序列化

json.dumps(data, default=json_serial)

8. 结论

操作方法
从字符串读取 JSONjson.loads(json_str)
从文件读取 JSONjson.load(file)
将 Python 对象转换为 JSON 字符串json.dumps(obj)
将 Python 对象写入 JSON 文件json.dump(obj, file)
格式化 JSON(缩进)json.dumps(obj, indent=4)
解析错误处理json.JSONDecodeError
处理非标准数据类型default=json_serial

Python 的 json 模块提供了强大且易用的 JSON 处理能力,合理使用这些方法,可以让你的代码更加高效、可维护!

以上就是Python使用json模块读取和写入JSON数据的详细内容,更多关于Python读取和写入JSON数据的资料请关注脚本之家其它相关文章!

相关文章

  • 关于matplotlib及相关cmap参数的取值方式

    关于matplotlib及相关cmap参数的取值方式

    这篇文章主要介绍了关于matplotlib及相关cmap参数的取值方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • 简单介绍Python中的struct模块

    简单介绍Python中的struct模块

    这篇文章主要介绍了Python中的struct模块,代码基于Python2.x版本,需要的朋友可以参考下
    2015-04-04
  • 在tensorflow下利用plt画论文中loss,acc等曲线图实例

    在tensorflow下利用plt画论文中loss,acc等曲线图实例

    这篇文章主要介绍了在tensorflow下利用plt画论文中loss,acc等曲线图实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-06-06
  • Conda与Python venv虚拟环境的区别与使用方法详解

    Conda与Python venv虚拟环境的区别与使用方法详解

    随着Python社区的成长,虚拟环境的概念和技术也在不断发展,这篇文章主要介绍了Conda与Python venv虚拟环境的区别与使用方法的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-07-07
  • Python 平方列表中每个数字的多种操作

    Python 平方列表中每个数字的多种操作

    这篇文章主要介绍了Python 平方列表中每个数字的多种操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-03-03
  • Python利用代理ip实现自动化爬虫任务管理

    Python利用代理ip实现自动化爬虫任务管理

    本文主要介绍了Python利用代理ip实现自动化爬虫任务管理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • 使用Python设置Windows文件默认打开程序

    使用Python设置Windows文件默认打开程序

    本文介绍了一个用于Windows系统设置文件默认打开程序的Python工具,通过命令行和注册表两种方式修改关联,适用于Windows7/10/11,代码包括设置默认程序、兼容性处理和验证功能,并提供了使用示例,需要的朋友可以参考下
    2026-01-01
  • Python入门教程(十一)Python中的运算符

    Python入门教程(十一)Python中的运算符

    这篇文章主要介绍了Python入门教程(十一)Python中的运算符,Python是一门非常强大好用的语言,也有着易上手的特性,本文为入门教程,需要的朋友可以参考下
    2023-04-04
  • Python爬虫实例——爬取美团美食数据

    Python爬虫实例——爬取美团美食数据

    这篇文章主要介绍了Python爬虫如何爬取美团美食数据,文中讲解非常详细,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-07-07
  • python与C互相调用的方法详解

    python与C互相调用的方法详解

    这篇文章主要给大家介绍了关于python与C互相调用方法的相关资料,文中通过示例代码详细介绍了动用的方法,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面跟着小编来一起学习学习吧。
    2017-07-07

最新评论