一尘不染

如何在JSON中编码字节?json.dumps()引发TypeError

json

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

import base64
import json

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

print(json.dumps(data))

我得到的错误:

TypeError: b'ZGF0YSB0byBiZSBlbmNvZGVk\n' is not JSON serializable

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


阅读 311

收藏
2020-07-27

共1个答案

一尘不染

JSON格式只支持 Unicode的
字符串
。由于base64.b64encode字节编码为仅ASCII字节,因此您可以使用该编解码器解码数据:

import base64

encoded = base64.b64encode(b'data to be encoded')  # b'ZGF0YSB0byBiZSBlbmNvZGVk' (notice the "b")
data['bytes'] = encoded.decode('ascii')            # 'ZGF0YSB0byBiZSBlbmNvZGVk'

请注意,要获取原始数据,您无需将其重新编码为字节,因为它可以b64decode处理仅ASCII字符串和字节:

decoded = base64.b64decode(data['bytes'])  # b'data to be encoded'
2020-07-27