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

如何结合使用json.dump与gzip?遇TypeError报错求解决

解决json.dump写入GzipFile时的TypeError问题

这个问题我之前也踩过坑,你分析的完全正确——gzip.open()默认是以二进制模式打开文件的,而json.dump()默认会输出字符串(str类型),但二进制文件对象的写入方法只接受bytes类型的数据,这就导致了那个TypeError: memoryview: a bytes-like objet is required, not 'str'错误。

下面给你两种直接用json.dump解决问题的方案:

方案1:以文本模式打开gzip文件(最简便)

直接给gzip.open()指定文本模式'wt',同时指定编码(比如utf-8),这样gzip文件对象就会自动处理字符串到字节的转换,json.dump可以直接写入:

import gzip, json
data = {"name": "test", "data": [1,2,3]}  # 你的数据字典
write_file = "output.json.gz"

with gzip.open(write_file, 'wt', encoding='utf-8') as zipfile:
    json.dump(data, zipfile)

读取的时候也对应使用文本模式:

with gzip.open(write_file, 'rt', encoding='utf-8') as zipfile:
    loaded_data = json.load(zipfile)

方案2:用TextIOWrapper包装二进制文件对象(更灵活)

如果你需要保持gzip文件的二进制打开模式(比如有其他二进制写入需求),可以用io.TextIOWrapper把二进制的GzipFile包装成文本对象,再传给json.dump:

import gzip, json, io
data = {"name": "test", "data": [1,2,3]}
write_file = "output.json.gz"

with gzip.open(write_file, 'wb') as zipfile:
    # 把二进制流包装成文本流
    with io.TextIOWrapper(zipfile, encoding='utf-8') as text_stream:
        json.dump(data, text_stream)

这两种方案都能满足你“用dump方法直接序列化到GzipFile对象”的需求,第一种更简洁,适合大多数常规场景;第二种适合需要混合二进制和文本写入的复杂场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:31:29