You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何用with open读JSON时‘rb’可用,写JSON时‘wb’却报错?

JSON文件读写模式差异的原因解析

读取时'r'和'rb'结果一致的原因

json.load() 函数对不同模式打开的文件对象做了兼容处理:

  • 用文本模式('r')打开文件时,文件返回字符串,json.load() 直接解析该字符串;
  • 用二进制模式('rb')打开文件时,文件返回字节数据,json.load() 会自动按JSON默认的UTF-8编码将字节解码为字符串后再解析。
    两种模式最终的解析结果完全相同,所以你会看到一致的输出。

写入时'wb'报错、'w'正常的原因

json.dump() 默认会把Python对象序列化为字符串:

  • 用'w'(文本模式)打开文件时,文件对象接受字符串输入,会自动按默认编码(通常为UTF-8)将字符串转为字节写入磁盘,因此运行正常;
  • 用'wb'(二进制模式)打开文件时,文件对象仅接受字节类型的数据,但json.dump()输出的是字符串,类型不匹配,就会抛出:

TypeError: a bytes-like object is required, not 'str'

如果一定要用二进制模式写入,可以先通过json.dumps()将对象转为字符串,再手动编码为字节写入,示例代码:

import json

some_dict = {"key": "value"}
with open('something.json', 'wb') as f:
    json_str = json.dumps(some_dict)
    f.write(json_str.encode('utf-8'))

内容的提问来源于stack exchange,提问作者Yandle

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 23:25:08