Python中如何将数据保存为JSON文件?

来源:微信开发网作者:俊华头衔:草根站长
导读:本期聚焦于小伙伴创作的《Python中如何将数据保存为JSON文件?》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《Python中如何将数据保存为JSON文件?》有用,将其分享出去将是对创作者最好的鼓励。

在Python开发中,将内存中的数据持久化保存到JSON文件是高频需求,无论是存储配置信息、接口返回数据还是程序运行结果,JSON格式都因为通用性强、可读性高被广泛使用。Python标准库自带了json模块,不需要额外安装第三方库就能完成相关操作。

Python中如何将数据保存为JSON文件?

基础保存方法

使用json模块的dump方法可以直接将Python对象写入到JSON文件中,最基础的用法只需要三行代码就能完成。

import json

# 待保存的Python数据,支持字典、列表等可序列化类型
data = {
    "name": "测试数据",
    "age": 25,
    "hobbies": ["阅读", "编程", "运动"]
}

# 打开文件并写入JSON数据,注意使用w模式,编码设置为utf-8避免中文乱码
with open("output.json", "w", encoding="utf-8") as f:
    json.dump(data, f)

运行上述代码后,当前目录下会生成output.json文件,内容如下:

{"name": "测试数据", "age": 25, "hobbies": ["阅读", "编程", "运动"]}

常用参数说明

json.dump方法还有很多可选参数,能够调整输出JSON文件的格式,适配不同的使用场景。

indent参数:格式化输出

默认的JSON输出是紧凑格式,没有换行和缩进,可读性较差。设置indent参数可以指定缩进的空格数,让输出的JSON文件更易阅读。

import json

data = {
    "user_id": 1001,
    "username": "zhangsan",
    "score": 95.5,
    "is_active": True
}

with open("formatted_output.json", "w", encoding="utf-8") as f:
    # indent=4表示使用4个空格作为缩进
    json.dump(data, f, indent=4, ensure_ascii=False)

生成的formatted_output.json内容如下:

{
    "user_id": 1001,
    "username": "zhangsan",
    "score": 95.5,
    "is_active": true
}

ensure_ascii参数:处理中文

默认情况下,json模块会将非ASCII字符(比如中文)转义为Unicode编码,设置ensure_ascii=False可以保留原始的中文内容,避免输出类似u6d4bu8bd5的乱码形式。

sort_keys参数:按键排序

如果希望输出的JSON对象的键按照字母顺序排列,可以设置sort_keys=True,默认值为False。

import json

data = {"c": 3, "a": 1, "b": 2}

with open("sorted_output.json", "w", encoding="utf-8") as f:
    json.dump(data, f, sort_keys=True, indent=4)

生成的文件内容会按键排序:

{
    "a": 1,
    "b": 2,
    "c": 3
}

特殊数据类型处理

json模块默认只能序列化部分Python内置数据类型,比如字典、列表、字符串、数字、布尔值、None,如果遇到datetime、自定义类实例等类型,直接序列化会抛出TypeError。

可以通过自定义序列化函数,然后赋值给default参数来解决这类问题。

import json
from datetime import datetime

# 自定义序列化处理函数
def custom_serializer(obj):
    if isinstance(obj, datetime):
        # 将datetime对象转换为字符串格式
        return obj.strftime("%Y-%m-%d %H:%M:%S")
    # 其他不支持的类型抛出异常
    raise TypeError(f"类型 {type(obj)} 不支持JSON序列化")

data = {
    "event": "数据保存测试",
    "create_time": datetime.now(),
    "count": 10
}

with open("special_type_output.json", "w", encoding="utf-8") as f:
    json.dump(data, f, default=custom_serializer, indent=4, ensure_ascii=False)

运行后生成的文件会正确保存时间字符串:

{
    "event": "数据保存测试",
    "create_time": "2024-05-20 14:30:00",
    "count": 10
}

常见注意事项

  • 打开文件时建议使用with语句,不需要手动关闭文件,避免资源泄露问题
  • 写入文件时编码建议统一设置为utf-8,尤其是包含中文内容时,避免出现乱码
  • 如果需要先获取JSON字符串再手动写入文件,可以使用json.dumps方法,它和dump方法的参数基本一致,只是返回字符串而不是写入文件
  • JSON格式中布尔值是小写的true和false,null对应Python的None,和Python的语法有区别,读取时需要注意
如果需要处理更复杂的JSON操作,比如修改已有JSON文件的部分内容,建议先读取文件内容到Python对象,修改后再重新写入,不要直接对JSON文件做局部修改。

PythonJSON文件操作数据持久化修改时间:2026-07-07 21:12:26

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。