You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

向Python服务器传递图片出现JSON序列化错误如何解决

问题修复方案

错误根因

  • base64.b64encode() 方法返回的结果是bytes类型,JSON格式不支持直接序列化bytes类型对象,这是触发类型错误的直接原因。
  • requests库的post方法json参数会自动对传入的Python对象做JSON序列化,你提前手动调用json.dumps(x)会导致请求体被双层序列化,服务端拿到数据后无法正常解析。

修复代码

客户端发送逻辑修改

import base64
import requests
sess = requests.Session()
with open("filename", "rb") as image_file:
    # 将base64编码后的bytes转为UTF-8字符串,适配JSON序列化要求
    encoded_string = base64.b64encode(image_file.read()).decode("utf-8")

x = {"inputs": {"key1": encoded_string}}
# 直接传入Python字典给json参数,requests自动完成序列化和请求头设置
my_response = sess.post("<HOST>", json=x)

服务端可选还原逻辑(如果需要还原原始图片)

你的原有Tornado解析代码不需要修改,如果需要将收到的base64字符串转回原始图片字节,可新增如下处理:

import base64
import json

# 原有解析逻辑保持不变
json_data = json.loads(self.request.body)
# 提取base64字符串并解码为原始图片字节
image_b64_str = json_data["inputs"]["key1"]
origin_image_bytes = base64.b64decode(image_b64_str)
# 示例:将图片字节写入本地存储
with open("received_image.png", "wb") as f:
    f.write(origin_image_bytes)

内容的提问来源于stack exchange,提问作者Sid Anand

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 03:06:03