NKJ*_*NKJ 6 python base64 serialization json python-3.x
尝试将输出转换为 Json 格式但出现错误。删除 json.dump 后,将数据转换为 Base64 格式。但是当使用 json.dump 时它显示错误。
代码:
import json
import base64
with open(r"C:/Users/Documents/pdf2txt/outputImage.jpg","rb") as img:
image = base64.b64encode(img.read())
data['ProcessedImage'] = image
print(json.dump(data)
Run Code Online (Sandbox Code Playgroud)
输出:
TypeError: Object of type 'bytes' is not JSON serializable
Run Code Online (Sandbox Code Playgroud)
使用时:
print(json.dumps(dict(data)))
Run Code Online (Sandbox Code Playgroud)
它也显示相同的错误
您必须使用str.decode()方法。
您正在尝试将 bytes 类型的对象序列化为 JSON 对象。JSON 模式中没有这样的东西。所以你必须先将字节转换为字符串。
另外,您应该使用json.dumps()而不是 json.dump(),因为您不想写入文件。
在你的例子中:
import json
import base64
with open(r"C:/Users/Documents/pdf2txt/outputImage.jpg", "rb") as img:
image = base64.b64encode(img.read())
data['ProcessedImage'] = image.decode() # not just image
print(json.dumps(data))
Run Code Online (Sandbox Code Playgroud)
首先,我认为您应该使用,json.dumps()因为您使用json.dump()错误的参数进行调用,并且它不会返回任何要打印的内容。
其次,正如错误消息所示,您无法序列化所需类型的bytes对象json.dumps()。要正确执行此操作,您需要使用某种编码将二进制数据解码为 Python 字符串。为了正确保存数据,您应该使用latin1编码,因为任意二进制字符串都是有效的latin1,它总是可以解码为 Unicode,然后再次编码回原始字符串(正如Sven Marnach在这个答案中指出的那样)。
这是您的代码,显示了如何做到这一点(加上对其他不直接相关问题的更正):
import json
import base64
image_path = "C:/Users/Documents/pdf2txt/outputImage.jpg"
data = {}
with open(image_path, "rb") as img:
image = base64.b64encode(img.read()).decode('latin1')
data['ProcessedImage'] = image
print(json.dumps(data))
Run Code Online (Sandbox Code Playgroud)
image(或返回的任何内容base64.b64encode)是二进制bytes对象,而不是字符串。JSON 无法处理二进制数据。如果要序列化图像数据,则必须对其进行解码:
data['ProcessedImage'] = image.decode()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
28748 次 |
| 最近记录: |