【问题标题】:How to attach a gz file to a json object in python?如何将gz文件附加到python中的json对象?
【发布时间】:2022-01-28 18:33:20
【问题描述】:

我有一个返回 gz 文件的 api。我运行 api 的应用程序只接受 json 格式。有没有办法将返回的 gz 文件附加到 json 对象? 将 gz 文件转换为 base64 格式,然后创建一个 json 对象,如 { "file": "base64 格式" } 有效吗?

print(json.dumps({'file': base64.b64decode(response_alert.content)}))

我得到了错误

Object of type bytes is not JSON serializable

【问题讨论】:

  • 是的.... 那会起作用的。如果遇到麻烦,试一试并发布您的代码!
  • 我正在尝试使用 base64.b64decode(response.content) 将我认为是压缩字节的响应内容转换为 base64,但我仍然得到一个错误它是字节。
  • b64decode 接受一个字符串并将其作为字节返回......你想要相反的结果。
  • codecs.decode(response_alert.content) 尝试了这个,但得到 'utf-8' 编解码器无法在位置 1 解码字节 0x8b:无效的起始字节..可能必须寻找正确的解码器

标签: python json gzip


【解决方案1】:

字符串编码为strbytes,解码为bytesstr。 Base64 是相反的,因为它将二进制数据编码为字符,而不是将字符编码为二进制数据。但是,由于它的许多用例都涉及 SMTP 等 ASCII 协议,base64.b64encode 实际上需要并返回 bytes(在后一种情况下为 ASCII)。因此你想要

json.dumps(dict(file=base64.b64encode(response_alert.content).decode()))

利用支持 ASCII 文本的默认编码 (UTF-8)。另一方面,您不必费心编码回bytes,因为str 已被base64.b64decode 接受。

【讨论】:

    猜你喜欢
    • 2018-05-21
    • 2020-04-12
    • 1970-01-01
    • 1970-01-01
    • 2017-03-26
    • 1970-01-01
    • 2016-08-21
    • 1970-01-01
    • 2020-03-14
    相关资源
    最近更新 更多