有没有办法使用`json.dump`和`gzip`?

时间:2018-03-28 12:43:32

标签: python json python-3.x gzip

Here是关于如何使用json.dumps写入gzip文件的绝佳答案。我想要做的是使用dump方法将json直接序列化为GzipFile对象。

示例代码:

import gzip, json

data = # a dictionary of data here
with gzip.open(write_file, 'w') as zipfile:
   json.dump(data, zipfile)

引发的错误是

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

我认为这是因为gzip write()方法需要传递给它的字节对象。根据{{​​3}},

  

json模块总是生成str对象,而不是字节对象。   因此,fp.write()必须支持str输入。

有没有办法将json字符串输出包装为字节,以便GzipFile' s write()能够处理它?或者是将json.dumpsencode()生成的字符串用于字节对象的唯一方法,就像在另一个链接的答案中一样?

2 个答案:

答案 0 :(得分:6)

gzip模块支持开箱即用:只需声明一个编码,它会在将unicode字符串写入文件之前将其编码为字节:

with gzip.open(write_file, 'wt', encoding="ascii") as zipfile:
   json.dump(data, zipfile)

确保使用文字模式('wt')指定。

由于json编码了任何非ascii字符,ascii编码就足够了,但你可以使用ascii与前面的128个代码点兼容的任何其他编码,如Latin1,UTF-8等

答案 1 :(得分:0)

将字符串转换为字节数组,您可以执行类似这样的操作

json.dump(bytes(data,"utf-8"), zipfile)