JSON 编码与解码
使用 json.loads、json.dumps 和 json.load/dump 进行 JSON 输入输出。
JSON 编码与解码 是 CoddyKit 上的免费 Python Academy 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Python Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Python Academy 课程共包含 4 节课。
简介
Python 的 json 模块可以使用简单且一致的函数,在 Python 对象与 JSON 字符串或文件之间进行转换。
json.dumps()
json.dumps(obj) 会将 Python 对象序列化为 JSON 字符串。indent=2 会以易读格式打印结果。
import json
d = {'name': 'Alice', 'age': 30, 'active': True}
print(json.dumps(d, indent=2))json.loads()
json.loads(s) 会将 JSON 字符串解析为 Python 对象。JSON 对象会变成字典,数组会变成列表。
import json
s = '{"name": "Alice", "scores": [90, 85]}'
data = json.loads(s)
print(type(data), data['name'])将 json.dump() 写入文件
json.dump(obj, file_object) 会直接将对象序列化到文件中。无需先保存字符串。
import json, tempfile, os
tmp = tempfile.mktemp(suffix='.json')
with open(tmp, 'w') as f:
json.dump({'x': 1}, f, indent=2)
print(open(tmp).read())
os.unlink(tmp)从文件读取 json.load()
json.load(file_object) 会直接从打开的文件对象中解析 JSON。
import json, io
buf = io.StringIO('{"key": "value"}')
data = json.load(buf)
print(data)JSON 类型映射
JSON 对象→字典。数组→列表。字符串→str。数字→int/float。true/false→True/False。null→None。
import json
s = '[1, "two", true, null, {"a": 3.14}]'
print(json.loads(s))不可序列化的类型
datetime、set 和 bytes 无法进行 JSON 序列化。请提供一个 default= 函数或继承 JSONEncoder。
import json
from datetime import datetime
def default(obj):
if isinstance(obj, datetime):
return obj.isoformat()
raise TypeError(f'{type(obj)} not serializable')
print(json.dumps({'ts': datetime.now()}, default=default))sort_keys 和 separators
sort_keys=True 会对字典键排序。separators=(',', ':') 会移除空白,以生成紧凑的输出。
import json
d = {'z': 3, 'a': 1, 'm': 2}
print(json.dumps(d, sort_keys=True, separators=(',', ':')))美化打印
json.dumps(obj, indent=4, ensure_ascii=False) 会生成易于阅读且保留 Unicode 的 JSON。
import json
d = {'name': 'Mehmet', 'city': 'Istanbul'}
print(json.dumps(d, indent=4, ensure_ascii=False))JSONDecodeError
json.loads(invalid) 会引发 json.JSONDecodeError。解析用户输入时,请始终使用 try/except 进行包装。
import json
try:
json.loads('{bad json}')
except json.JSONDecodeError as e:
print(f'Parse error: {e}')更新 JSON 文件
读取 → 修改 → 写回:这是更新 JSON 配置文件的标准模式。
import json, io
buf = io.StringIO('{"count": 5}')
data = json.load(buf)
data['count'] += 1
print(json.dumps(data))快速检查
哪个函数会将 JSON 字符串解析为 Python 对象?
总结
字符串使用 json.dumps/loads,文件使用 json.dump/load。类型映射:对象→字典,数组→列表,null→None。通过 default= 函数实现自定义序列化。
继续学习
请继续努力!进入下一课。
常见问题解答
「JSON 编码与解码」课时是免费的吗?
是的 — 「JSON 编码与解码」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Python Academy 课程的其余内容,请升级到 CoddyKit PRO。 Python Academy 课程共包含 4 节课。
「JSON 编码与解码」这节课中我会学到什么?
使用 json.loads、json.dumps 和 json.load/dump 进行 JSON 输入输出。 你通过在浏览器中直接运行的动手代码来练习 Python Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Python Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Python Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。
「JSON 编码与解码」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Python Academy 课中编写并运行代码吗?
能。每节 Python Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。