JSON.loads 在龙卷风处理程序中调用时给出字符串输出

JSON.loads gives a string output when invoked in tornado handler

我正在将一些数据传递给调用 json.loads(request.body) 的龙卷风服务器处理程序 这是 request.body 的样子:

b'"{\"inputs\": {\"key1\": \"/9j/4QxgRXhpZgAATU0AKgAAAAgA....... sVf/2Q==\"}}"'

当我在此 request.body 上调用 json.loads 时,这就是输出的样子

payload = json.loads(request.body)
print(payload)
{"inputs": {"key1": "/9j/4QxgRXhpZgAATU.....rsVf/2Q=="}}
print(type(payload)) # <class 'str'>
payload2 = json.loads(payload)
print(type(payload2 )) # <class 'dict'>

我不确定为什么 json.loads 的输出是 str

这是我传递的请求正文

with open("ee", "rb") as image_file:
    encoded_string = base64.b64encode(image_file.read())

x = {"inputs": {"key1": encoded_string.decode("utf-8")}}
<request_session>.post(<HOST>, json=json.dumps(x))

如何更改我的请求正文,以便在我的 request.body 上调用 json.loads 时,我会收到字典

处理程序内置在 tornado 中

您收到的数据json编码了两次。所以你需要在服务器上解码两次才能得到字典。

问题在于您从客户端发送数据的方式。如果 requestssee the docsjson 参数应该是 json 可序列化对象,而不是已经序列化的对象。

这意味着 requests 也在再次编码您的 json 数据。

尝试在没有 json 编码的情况下传递字典:

<request_session>.post(<HOST>, json=x)