我正在编写一个脚本来为演示自动生成数据,我需要在 JSON 中序列化一些数据。此数据的一部分是图像,因此我将其编码为 base64,但是当我尝试运行我的脚本时,我得到:
Traceback (most recent call last):
File "lazyAutomationScript.py", line 113, in <module>
json.dump(out_dict, outfile)
File "/usr/lib/python3.4/json/__init__.py", line 178, in dump
for chunk in iterable:
File "/usr/lib/python3.4/json/encoder.py", line 422, in _iterencode
yield from _iterencode_dict(o, _current_indent_level)
File "/usr/lib/python3.4/json/encoder.py", line 396, in _iterencode_dict
yield from chunks
File "/usr/lib/python3.4/json/encoder.py", line 396, in _iterencode_dict
yield from chunks
File "/usr/lib/python3.4/json/encoder.py", line 429, in _iterencode
o = _default(o)
File "/usr/lib/python3.4/json/encoder.py", line 173, in default
raise TypeError(repr(o) + " is not JSON serializable")
TypeError: b'iVBORw0KGgoAAAANSUhEUgAADWcAABRACAYAAABf7ZytAAAABGdB...
...
BF2jhLaJNmRwAAAAAElFTkSuQmCC' is not JSON serializable
据我所知,base64 编码的任何东西(在本例中为 PNG 图像)只是一个字符串,因此它应该对序列化造成问题。我错过了什么?
原文由 frollo 发布,翻译遵循 CC BY-SA 4.0 许可协议
您必须注意数据类型。
如果你读取二进制图像,你会得到字节。如果你用 base64 对这些字节进行编码,你又会得到 … 字节! (请参阅有关 b64encode 的文档)
json 无法处理原始字节,这就是您收到错误的原因。
我刚刚写了一些例子,附有评论,希望对您有所帮助: