Python 使用json.load解析json数组的正确方法是什么?

Python 使用json.load解析json数组的正确方法是什么?,python,arrays,json,parsing,Python,Arrays,Json,Parsing,我试图弄明白如何从JSON文件解析完整的数组。我设法用一个对象实现了这一点,但我不知道为什么它对一个完整的数组不起作用 [ {"SequenceNumber": 20, "Offset": "4294967296", "EnqueuedTimeUtc": "4/8/2021 7:22:56 AM", "SystemProperties": {"x-opt-enqueu

我试图弄明白如何从JSON文件解析完整的数组。我设法用一个对象实现了这一点,但我不知道为什么它对一个完整的数组不起作用

[
{"SequenceNumber": 20, "Offset": "4294967296", "EnqueuedTimeUtc": "4/8/2021 7:22:56 AM", "SystemProperties": {"x-opt-enqueued-time": {"long": 1617866576085}}, "Properties": {"Postman-Token": {"string": "21be7531-8f6b-422c-b676-#####"}}, "Body": {"bytes": "{\"id\":1,\"receiver\":\"77777777\",\"message\":{\"test\":\" test signal\",\"PrsId\":3,\"DriverId\":2,\"GUID\":\"1s3q1d-s546dq1-8e22e\",\"LineId\":2,\"SvcId\":2,\"Lat\":-456.546547,\"Lon\":-68.546547,\"TimeStamp\":\"2021-03-18T08:29:36.758Z\",\"Recorder\":\"dq65ds4qdezzer\",\"Env\":\"PRD\"},\"operator\":20404,\"sender\":\"MSISDN\",\"binary\":1,\"sent\":\"2021-03-29T08:29:36.758Z\"}"}},
{"SequenceNumber": 20, "Offset": "4294967296", "EnqueuedTimeUtc": "4/8/2021 7:22:56 AM", "SystemProperties": {"x-opt-enqueued-time": {"long": 1617866576085}}, "Properties": {"Postman-Token": {"string": "21be7531-8f6b-422c-b676-#####"}}, "Body": {"bytes": "{\"id\":1,\"receiver\":\"77777777\",\"message\":{\"test\":\" test signal\",\"PrsId\":3,\"DriverId\":2,\"GUID\":\"1s3q1d-s546dq1-8e22e\",\"LineId\":2,\"SvcId\":2,\"Lat\":-65634.546547,\"Lon\":-68.546547,\"TimeStamp\":\"2021-03-18T08:29:36.758Z\",\"Recorder\":\"dq65ds4qdezzer\",\"Env\":\"PRD\"},\"operator\":20404,\"sender\":\"MSISDN\",\"binary\":1,\"sent\":\"2021-03-29T08:29:36.758Z\"}"}},
{"SequenceNumber": 20, "Offset": "4294967296", "EnqueuedTimeUtc": "4/8/2021 7:22:56 AM", "SystemProperties": {"x-opt-enqueued-time": {"long": 1617866576085}}, "Properties": {"Postman-Token": {"string": "21be7531-8f6b-422c-b676-#####"}}, "Body": {"bytes": "{\"id\":1,\"receiver\":\"77777777\",\"message\":{\"test\":\" test signal\",\"PrsId\":3,\"DriverId\":2,\"GUID\":\"1s3q1d-s546dq1-8e22e\",\"LineId\":2,\"SvcId\":2,\"Lat\":-78946.546547,\"Lon\":-68.546547,\"TimeStamp\":\"2021-03-18T08:29:36.758Z\",\"Recorder\":\"dq65ds4qdezzer\",\"Env\":\"PRD\"},\"operator\":20404,\"sender\":\"MSISDN\",\"binary\":1,\"sent\":\"2021-03-29T08:29:36.758Z\"}"}}
]
我通过在Python中执行以下操作,了解了如何使用单个对象执行此操作:

response['Body']=json.load(response['Body']['bytes'])

我做错了什么?即使对于数组,它也应该是相同的吗

希望的结果是这样的

[
  {"id":1,"receiver":"77777777","message":{"test":" test signal","VehId":3,"DriverId":2,"GUID":"1s3q1d-s546dq1-8e22e","LineId":2,"SvcId":2,"Lat":-64.546547,"Lon":-68.546547,"TimeStamp":"2021-03-18T08:29:36.758Z","Recorder":"dq65ds4qdezzer","Env":"PRD"},"operator":20404,"sender":"MSISDN","binary":1,"sent":"2021-03-29T08:29:36.758Z"},
  {"id":1,"receiver":"77777777","message":{"test":" test signal","VehId":3,"DriverId":2,"GUID":"1s3q1d-s546dq1-8e22e","LineId":2,"SvcId":2,"Lat":-64.546547,"Lon":-68.546547,"TimeStamp":"2021-03-18T08:29:36.758Z","Recorder":"dq65ds4qdezzer","Env":"PRD"},"operator":20404,"sender":"MSISDN","binary":1,"sent":"2021-03-29T08:29:36.758Z"},
  {"id":1,"receiver":"77777777","message":{"test":" test signal","VehId":3,"DriverId":2,"GUID":"1s3q1d-s546dq1-8e22e","LineId":2,"SvcId":2,"Lat":-64.546547,"Lon":-68.546547,"TimeStamp":"2021-03-18T08:29:36.758Z","Recorder":"dq65ds4qdezzer","Env":"PRD"},"operator":20404,"sender":"MSISDN","binary":1,"sent":"2021-03-29T08:29:36.758Z"}
]
编辑:当我尝试将其用于数组时,出现以下错误: 我试图解析的文件如下所示:
(结果:失败异常:TypeError:列表索引必须是整数或片,而不是str)

response
是一个列表,因此您正在使用字符串索引列表


response['Body']=[json.load(item['Body']['bytes'])对于响应中的项来说应该是有效的。
response是一个列表,所以您正在用字符串索引列表


response['Body']=[json.load(item['Body']['bytes'])用于响应中的项]
应该可以工作。

我想你在找这个


for dict1 in x:
   print(dict1["Body"]["bytes"])

您的错误是,您没有重复列表中的dicts。

我想您正在寻找这个


for dict1 in x:
   print(dict1["Body"]["bytes"])

您的错误是,您没有遍历列表中的dicts。

为什么您认为您做错了什么?因为当我尝试使用数组时,消息失败(结果:失败异常:TypeError:列表索引必须是整数或片,而不是str)。应该把这一点作为问题的答案lol@BuddyBobIII对对此很抱歉,我认为这可能是某种“错误使用JSON.loads()”,其中错误消息并不重要。为什么您认为您做错了什么?因为我在消息中遇到了错误(结果:失败异常:TypeError:列表索引必须是整数或片,而不是str)当我用数组尝试它时,应该把它放在问题的前面lol@BuddyBobIII是的,很抱歉,我认为这可能是某种“错误使用JSON.loads()”,错误消息并不重要。出于好奇,如果我返回func.HttpResponse,情况是否也一样返回func.HttpResponse中jsonStr的func.HttpResponse(json.load(jsonStr['Body']['bytes']),status_code=200)``其中jsonStr是一个填充了json对象数组的文档。我应该那样做吗?还是我做的都错了?假设你在这里使用Azure函数-HttpResponse的主体应该是一个JSON字符串,所以类似
func.HttpResponse(JSON.dumps([JSON.loads(响应中的项为[JSON.loads(item['body']['bytes']),mimetype=“application/JSON”,status\u code=200)的东西应该这样做。您需要将响应的MIME类型定义为JSON。请参阅相关内容:哦,好的,谢谢你让我知道“MIME类型”,我应该用包含JSON数组的文件“jsonStr”替换“response”吗?出于好奇,我用open('json_file.json','rb')作为file:jsonStr=file.read()来定义它,如果我返回func.HttpResponse,情况是否相同返回func.HttpResponse中jsonStr的func.HttpResponse(json.load(jsonStr['Body']['bytes']),status_code=200)``其中jsonStr是一个填充了json对象数组的文档。我应该那样做吗?还是我做的都错了?假设你在这里使用Azure函数-HttpResponse的主体应该是一个JSON字符串,所以类似
func.HttpResponse(JSON.dumps([JSON.loads(响应中的项为[JSON.loads(item['body']['bytes']),mimetype=“application/JSON”,status\u code=200)的东西应该这样做。您需要将响应的MIME类型定义为JSON。请参阅相关内容:哦,好的,谢谢你让我知道“MIME类型”,我应该用包含JSON数组的文件“jsonStr”替换“response”吗?我定义它的方法是:使用open('json_file.json','rb')作为file:jsonStr=file.read()