当前位置: 代码网 > it编程>前端脚本>Python > Python使用json模块读取和写入JSON数据

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

2025年03月06日 Python 我要评论
在现代软件开发中,json(javascript object notation) 已成为最流行的数据交换格式之一。python 提供了内置的 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数据的资料请关注代码网其它相关文章!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com