如何在JSON中编码字节?json.dumps()抛出一个TypeError

Fan*_*nta 22 python json python-3.x

我正在尝试编码包含字符串的字典json,并获得一个is not JSON serializable error.

示例代码:

import base64
import json

data={}
encoded = base64.encodebytes(b'data to be encoded')
data['bytes']=encoded

print(json.dumps(data))
Run Code Online (Sandbox Code Playgroud)

我收到的错误:

TypeError: b'ZGF0YSB0byBiZSBlbmNvZGVk\n' is not JSON serializable
Run Code Online (Sandbox Code Playgroud)

如何正确编码包含JSON字节的字典?

Mar*_*ers 31

JSON格式仅支持unicode字符串.由于Base64将字节编码为仅ASCII字节,因此您可以使用该编解码器对数据进行解码:

encoded = base64.encodestring(b'data to be encoded')
data['bytes'] = encoded.decode('ascii')
Run Code Online (Sandbox Code Playgroud)

  • @JelledeFries:不,因为 Base64 只使用 ASCII 字符。 (6认同)
  • 我知道这是一篇旧文章,但您可能想使用“UTF8”而不是“ASCII” (4认同)
  • @PhilipCouling:除了base64只使用ASCII字符,如果应该只产生ASCII代码点的代码实际上没有这样做,那么有些东西就会被破坏。我喜欢设置这样的安全阀,并明确约束条件。 (4认同)
  • @MartijnPieters 从技术上讲,这是静音点。所有 ASCII 字符*在设计上*也是 UTF-8 字符。然而,Jelle de Fries 说得有道理,因为 UTF-8 如此普遍,以至于对其他任何内容进行编码都是有充分理由的。我认为没有充分的理由选择 ASCII 而不是 UTF-8。 (3认同)
  • encodestring()在Python 3中已被弃用。使用encodebytes()。 (2认同)
  • @bdetweiler:我故意使用`encodestring()`使其与Python 2兼容。该方法不会很快消失,还没有计划进行删除,并且到目前为止还没有发布6个Python 3版本。 (2认同)
  • 谢谢!我花了很长时间找到这个答案,而且弄清楚如何通过JSON发送任意二进制数据并不难。救命。 (2认同)