Python 当通过消息请求将json文件作为输入时,正确解码json文件
我想阅读通过curl发送的请求,如下所示: curl-X POST-v路径/request.json。json具有以下格式:Python 当通过消息请求将json文件作为输入时,正确解码json文件,python,json,amazon-web-services,web-services,pytorch,Python,Json,Amazon Web Services,Web Services,Pytorch,我想阅读通过curl发送的请求,如下所示: curl-X POST-v路径/request.json。json具有以下格式: { “imgX”:[{ “键”:“x”, “url”:”http://127.0.0.1:8080/imgs/x.png" }], “imgY”:[{ “键”:“y”, “url”:”http://127.0.0.1:8080/imgs/y.png" }] } 服务初始化后,我的代码是: def preprocess(self, data): _json =
{
“imgX”:[{
“键”:“x”,
“url”:”http://127.0.0.1:8080/imgs/x.png"
}],
“imgY”:[{
“键”:“y”,
“url”:”http://127.0.0.1:8080/imgs/y.png"
}]
}
服务初始化后,我的代码是:
def preprocess(self, data):
_json = {}
for row in data:
json_obj = row.get("data") or row.get("body")
self.parameter_dict = dict(json_obj)
image_url = ""
json_obj = dict(json_obj)
for img_inputs, msk_inputs in zip(json_obj['imgX'], json_obj['imgY']):
key = img_inputs['key']
然而,这就产生了:
KeyError: 'img'
我调试并发现在读取json文件时,每一行都是一个字节数组:
{'body': bytearray(b'')}.
如何解码以恢复.json格式?为了避免来自API的json响应出现问题,可以使用
json
。特别是json.loads()
返回一个字典,因此您不必手动转换内容
例如:
import json
with open('<path_to_file>/request.json','r') as f:
data = f.read()
_json = json.loads(data)
print(_json)
另一方面,当使用zip()
时,如果您得到两个列表img_输入
和msk_输入
,每个列表中都有一个以上的json对象/字典,为了使img_输入['key']
工作,您需要循环这些列表的值以找到键
#...
for img_inputs, msk_inputs in zip(json_obj['imgX'], json_obj['imgY']):
key = img_inputs[0]['key']
#...
在这种情况下(我修改了我的代码),zip()
将返回img\u输入和msk\u输入的列表中的第一个元素,这样就不需要执行该步骤,for循环就可以了
请确保您从API获得了有效的json响应。问题是“imageX”
与“imgX”
?不,更正了我使用json.loads()对数据进行了解决,但得到了以下结果:TypeError:json对象必须是str、bytes或bytearray,而不是list请更新您的答案,包括数据请求的代码。另外,根据,您作为示例提供的JSON无效。它已更新,请求在开始时通过curl命令发出。request.json就是前面提到的文件。我可以确认该服务已正确初始化。但是,我不确定请求是否绝对正确,以及错误是否来自该方。欢迎任何帮助。
#...
for img_inputs, msk_inputs in zip(json_obj['imgX'], json_obj['imgY']):
key = img_inputs[0]['key']
#...