news 2026/10/30 5:01:35

Python 中的 json 模块

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Python 中的 json 模块

json是 Python 标准库中用于处理 JSON 数据的模块。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,广泛用于 Web API、配置文件等场景。

json模块的核心功能是:在 Python 对象和 JSON 字符串之间互相转换。

一、序列化与反序列化

操作说明方法
序列化Python 对象 → JSON 字符串dumps()/dump()
反序列化JSON 字符串 → Python 对象loads()/load()

说明:

  • 带s的(dumps/loads)→ 操作字符串(string)

  • 不带s的(dump/load)→ 操作文件(file)

二、Python 与 JSON 的类型映射

Python 类型JSON 类型
dictobject
list/tuplearray
strstring
int/floatnumber
True/Falsetrue/false
Nonenull

注意:

  • Python 的tuple会被序列化为 JSON 的array,但反序列化时变回list

  • JSON 的number反序列化时,整数变int,小数变float

三、json.dumps():Python 对象 → JSON 字符串

1. 基本用法

import json data = { "name": "Alice", "age": 25, "is_active": True, "hobbies": ["reading", "swimming"], "address": None } json_str = json.dumps(data) print(json_str) # '{"name": "Alice", "age": 25, "is_active": true, "hobbies": ["reading", "swimming"], "address": null}' print(type(json_str)) # <class 'str'>

2. 常用参数

参数说明示例
indent缩进空格数,美化输出indent=2
ensure_ascii是否转义非 ASCII 字符ensure_ascii=False(保留中文)
sort_keys按键排序sort_keys=True
separators自定义分隔符separators=(",", ":")
default处理不可序列化对象default=str
data = {"name": "张三", "age": 25} # 美化输出 + 保留中文 print(json.dumps(data, indent=2, ensure_ascii=False)) # { # "name": "张三", # "age": 25 # } # 按 key 排序 print(json.dumps(data, sort_keys=True)) # '{"age": 25, "name": "张三"}' # 紧凑输出(默认分隔符是 ", " 和 ": ") print(json.dumps(data, separators=(",", ":"))) # '{"name":"张三","age":25}'

3. 处理不可序列化对象

json.dumps()默认只能序列化基本类型。遇到datetime、自定义对象时会报错,需要用default指定转换函数。

from datetime import datetime data = {"time": datetime.now()} # 报错:Object of type datetime is not JSON serializable # json.dumps(data) # 用 default 指定转换函数 json_str = json.dumps(data, default=str) print(json_str) # '{"time": "2024-01-01 12:00:00"}' # 自定义转换函数 def custom_converter(obj): if isinstance(obj, datetime): return obj.isoformat() raise TypeError(f"Object of type {type(obj)} is not JSON serializable") json_str = json.dumps(data, default=custom_converter)

四、json.loads():JSON 字符串 → Python 对象

import json json_str = '{"name": "Alice", "age": 25, "hobbies": ["reading"]}' data = json.loads(json_str) print(data) # {'name': 'Alice', 'age': 25, 'hobbies': ['reading']} print(type(data)) # <class 'dict'> print(data["name"]) # Alice

常用参数

参数说明
object_hook自定义字典的反序列化处理
parse_float自定义浮点数解析
parse_int自定义整数解析
# 自定义整数解析 data = json.loads('{"age": 25}', parse_int=lambda x: int(x) * 2) print(data) # {'age': 50}

五、json.dump():写入文件

dump()直接把 Python 对象写入文件,不用手动write()。

import json data = { "name": "Alice", "age": 25, "hobbies": ["reading", "swimming"] } # 写入文件 with open("data.json", "w", encoding="utf-8") as f: json.dump(data, f, indent=2, ensure_ascii=False)

参数说明:

参数说明
fp文件对象(必须支持write())
indent缩进
ensure_ascii是否保留中文
sort_keys按键排序
default不可序列化对象的处理

注意:dump()的第一个参数是对象,第二个参数才是文件。

六、json.load():从文件读取

import json # 从文件读取 with open("data.json", "r", encoding="utf-8") as f: data = json.load(f) print(data["name"]) # Alice print(type(data)) # <class 'dict'>

注意:load()只接受文件对象,不接受字符串。

# 正确:传文件对象 data = json.load(f) # 错误:传字符串会报错 # data = json.load('{"name": "Alice"}') # 字符串用 loads data = json.loads('{"name": "Alice"}')

方法对比

方法方向数据源/目标返回值
dumps()Python → JSON对象 →字符串str
loads()JSON → Python字符串→ 对象dict/list
dump()Python → JSON对象 →文件None
load()JSON → Python文件→ 对象dict/list
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/30 5:00:52

S905L2+RTL8822BS刷Armbian成功实录

基于 主板&#xff1a;5800-2ATA405 处理器&#xff1a;Amlogic S905L2 无线模块&#xff1a;Realtek RTL8822BS 的 Armbian 实践 实践结果&#xff1a;成功进入 Armbian&#xff0c;WiFi 可用&#xff0c;USB 可用&#xff0c;蓝牙可用&#xff08;已修复&#xff09; 本实践所…

作者头像 李华
网站建设 2026/10/30 4:58:57

免费声音克隆工具哪个好用?AI配音与真人音色复刻指南

如果你想找免费的声音克隆工具&#xff0c;首先要区分两种需求&#xff1a;一种是直接选择现成的AI音色进行配音&#xff0c;另一种是用获得授权的真人声音制作个性化语音。前者更适合日常短视频&#xff0c;后者更适合希望长期保持个人声音特色的创作者。选择时不能只看声音像…

作者头像 李华
网站建设 2026/10/30 4:57:48

记一次Oracle 归档进程卡死怎么去有效排查

目录 一、快速判断与根本原因 第一步&#xff1a;检查 ASM 磁盘组剩余空间&#xff08;如果是 ASM 归档&#xff09; 第二步&#xff1a;检查归档目标状态与错误信息 第三步&#xff1a;检查 FRA&#xff08;快速恢复区&#xff09;与 ASM 磁盘组 第四步&#xff1a;确认归档进…

作者头像 李华
网站建设 2026/10/30 4:57:46

06|DeepSeek Harness 的动态上下文,能直接当作长期记忆吗?

给 DeepSeek Harness 注册一段文字,下次请求时能够读到它,是否就实现了长期记忆?还没有。首先要分清两个动作:把资料保存下来,以及在需要时把资料读出来。 动态上下文解决的是后一个问题。本文用 @deepseek-ai/dsh-system-prompt@0.2.1-rc.2 做一个文件读取实验,观察文件…

作者头像 李华