Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 当通过消息请求将json文件作为输入时,正确解码json文件_Python_Json_Amazon Web Services_Web Services_Pytorch - Fatal编程技术网

Python 当通过消息请求将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 =

我想阅读通过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 = {}
    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']
    #...