当前位置: 首页 > news >正文

Python dumps,dump区别,以及详细用法

这是一个非常核心的Python知识点。下面我将从核心区别详细参数实战示例以及其他模块(如pickle)的用法四个维度为你进行全面解析。


一、核心区别(先看这个)

简单来说,区别只在于“输出到哪里”

特性

json.dump()

json.dumps()

目标

文件对象 (File Object)

字符串 (String)

动作

序列化并直接写入文件

序列化并返回字符串

返回值

None

JSON格式的字符串

记忆法

dump to file

dump to string


二、详细用法与参数解析

两者都属于json模块,用于将 Python 字典/列表等对象转换为 JSON 格式。

1.json.dumps()(Serialize to String)

功能:将 Python 对象转换成 JSON 字符串。

语法

json.dumps(obj, *, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, default=None, sort_keys=False, **kw)

关键参数详解

  • indent(int): 缩进空格数,用于美化输出(Pretty Print)。

  • ensure_ascii(bool): 默认为True。若为False,则允许输出非ASCII字符(如中文),否则会转义为\uXXXX

  • sort_keys(bool): 默认为False。若为True,输出的字典按键名排序。

  • separators(tuple): 去除多余空格,压缩JSON。例如(',', ':')

示例

import json data = { "name": "张三", "age": 28, "skills": ["Python", "Java"], "is_student": False } # 1. 基础用法 json_str = json.dumps(data) print(json_str) # 输出: {"name": "\u5f20\u4e09", "age": 28, "skills": ["Python", "Java"], "is_student": false} # 2. 显示中文 + 美化输出 pretty_json = json.dumps(data, ensure_ascii=False, indent=4, sort_keys=True) print(pretty_json) # 输出: # { # "age": 28, # "is_student": false, # "name": "张三", # "skills": [ # "Python", # "Java" # ] # } # 3. 压缩JSON(用于网络传输) compact_json = json.dumps(data, separators=(',', ':')) print(compact_json) # 输出: {"name":"张三","age":28,"skills":["Python","Java"],"is_student":false}
2.json.dump()(Serialize to File)

功能:将 Python 对象序列化并直接写入一个文件对象。

语法

json.dump(obj, fp, *, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, default=None, sort_keys=False, **kw)

参数含义与dumps完全一致,只是第一个参数后多了一个文件指针fp

示例

import json data = {"project": "AI Assistant", "version": 1.0} # 结合 with open 语句使用是最佳实践 with open('config.json', 'w', encoding='utf-8') as f: # 直接将 data 写入文件 f json.dump(data, f, ensure_ascii=False, indent=4) # 此时文件 config.json 的内容已经是格式化好的 JSON

三、反序列化:loadloads

为了形成完整知识体系,必须提及对应的读取函数:

函数

作用

输入源

json.load()

从文件读取 JSON

文件对象

json.loads()

从字符串解析 JSON

字符串

# 接上面的 config.json 文件 with open('config.json', 'r', encoding='utf-8') as f: loaded_data = json.load(f) # 从文件加载 print(loaded_data['project']) # 输出: AI Assistant json_text = '{"city": "Beijing", "population": 2100}' parsed_data = json.loads(json_text) # 从字符串加载 print(parsed_data['city']) # 输出: Beijing

四、扩展到pickle模块(二进制序列化)

pickle是 Python 特有的序列化模块,规则一模一样:带 s 是字符串,不带 s 是文件

⚠️安全警告:永远不要unpickle来自不信任来源的数据,这可能导致代码执行漏洞。

import pickle data = {'list': [1, 2, 3], 'tuple': (4, 5)} # 1. dumps -> bytes (注意是字节串,不是字符串) byte_data = pickle.dumps(data) print(byte_data) # 输出类似 b'\x80\x04\x95...' # 2. loads -> object restored = pickle.loads(byte_data) print(restored) # {'list': [1, 2, 3], 'tuple': (4, 5)} # 3. dump -> 文件 with open('data.pkl', 'wb') as f: # 注意是 'wb' 二进制写入 pickle.dump(data, f) # 4. load -> 从文件恢复 with open('data.pkl', 'rb') as f: # 注意是 'rb' 二进制读取 restored_from_file = pickle.load(f)

五、如何选择?一张表总结

场景

推荐函数

原因

保存配置、数据到本地文件

json.dump()

直接落盘,代码简洁

通过网络发送数据 (API/WebSocket)

json.dumps()

需要字符串进行传输

缓存复杂 Python 对象 (含自定义类)

pickle.dumps()

JSON 无法序列化自定义对象

读取配置文件

json.load()

直接从文件流解析

解析接口返回的 JSON 文本

json.loads()

从接收到的字符串解析

终极记忆口诀

s 代表 String (字符串)

没有 s 代表 Stream/File (流/文件)

http://www.cnnetsun.cn/news/3035827.html

相关文章:

  • Bifrost:三星用户的固件管家,让刷机变得像点外卖一样简单
  • 3分钟掌握SuperImage:让手机上的模糊照片瞬间变清晰的AI神器
  • 3小时从零到精通:Ryujinx Switch模拟器终极使用手册
  • 三分钟搞定黑苹果:OpCore Simplify终极配置指南
  • 大模型 API 返回内容太短的完整排查:max_tokens、stop、stream 与上下文窗口配置
  • 山东春考网课:让备考更高效,让升学更有方向
  • 人工智能模型应用期末大作业|基于Flask实现带可视化前端的智能简历筛选系统
  • 企业公开信用信息处理,为什么要先做数据源拆解?
  • 职场成长内容平台哪个好用?工作忙想学方法,可以优先体验帆书
  • STM32的GPIO输出速率配置,从寄存器说起
  • DNS服务器到底部署在哪?浏览器域名解析全过程,一步不落讲透
  • 零壹教育:吃透Python基础逻辑,比死记语法更重要
  • 机器学习之集成学习AdaBoost
  • Crypto Lifeline:当“加密大佬”为你打工
  • 用数据说话 降AI率平台深度测评与推荐
  • 人生没有“标准答案”,唯一的标准是“跑得通”
  • 垂直领域真的需要给ai特定的某些东西吗?
  • 传统年轻人只爱潮牌,编程统计20到30岁新中式通勤服饰消费数据,验证国风成熟穿搭受众规模。
  • 系统门窗水密性等级标准(GB/T 8478-2020):500-700Pa抗风雨性能分析
  • Node| 如何创建一个自定义的验证中间件?
  • 第53篇:验证码识别 - CNN与深度学习实战
  • 第55篇:代理池架构与IP管理策略
  • 第60篇:爬虫安全与合规实战
  • 影刀RPA新手教程:OCR文字识别完全指南——让影刀读懂图片里的文字
  • 海王IM即时通讯----沟通工具的增多,并未带来协作效率的同步提升
  • Spring AI 集成 DeepSeek 原生供应商:告别 OpenAI 兼容层,获取结构化推理过程
  • OSINT Cheat Sheet:一份覆盖全场景的开源情报工具速查表
  • RSS 生态全收录:一份持续更新的资源清单
  • Query Loop 如何驱动任务闭环
  • YOLO检测头改进- 第38篇:Anchor-Free与Anchor-Based检测头融合方案