Python 如何从avro文件转换为json文件,该文件最初是通过Azure事件中心通过邮递员以原始json的形式发送的?
所以问题是,我最初通过邮递员将其作为原始数据发送:Python 如何从avro文件转换为json文件,该文件最初是通过Azure事件中心通过邮递员以原始json的形式发送的?,python,json,azure-functions,postman,azure-eventhub,Python,Json,Azure Functions,Postman,Azure Eventhub,所以问题是,我最初通过邮递员将其作为原始数据发送: { "id":1, "receiver":"2222222222222", "message":{ "Name":"testing", "PersonId":2, "CarId":2, "GUID":&
{
"id":1,
"receiver":"2222222222222",
"message":{
"Name":"testing",
"PersonId":2,
"CarId":2,
"GUID":"1s3q1d-s546dq1-8e22e",
"LineId":2,
"SvcId":2,
"Lat":-64.546547,
"Lon":-64.546547,
"TimeStamp":"2021-03-18T08:29:36.758Z",
"Recorder":"dq65ds4qdezzer",
"Env":"DEV"
},
"operator":20404,
"sender":"MSISDN",
"binary":1,
"sent":"2021-03-18T08:29:36.758Z"
}
原始数据作为JSON通过邮递员发送:
{
"id":1,
"receiver":"2222222222222",
"message":{
"Name":"testing",
"PersonId":2,
"CarId":2,
"GUID":"1s3q1d-s546dq1-8e22e",
"LineId":2,
"SvcId":2,
"Lat":-64.546547,
"Lon":-64.546547,
"TimeStamp":"2021-03-18T08:29:36.758Z",
"Recorder":"dq65ds4qdezzer",
"Env":"DEV"
},
"operator":20404,
"sender":"MSISDN",
"binary":1,
"sent":"2021-03-18T08:29:36.758Z"
}
一旦被事件中心捕获,它将转换为Avro文件。
我试图使用fastavro检索数据,并将其转换为JSON格式。
问题是,我没有得到最初由邮递员发送的原始数据。我找不到办法将它转换回原来的状态,为什么Avro也会从邮递员那里给我发送额外的信息?
我可能需要找到一种方法,将“Body”设置为仅转换。但出于某种原因,它也会在体内添加“字节”
我只是想找回通过邮递员发送的原始数据
init.py(Azure函数)
预期结果:
{
"id":1,
"receiver":"2222222222222",
"message":{
"Name":"testing",
"PersonId":2,
"CarId":2,
"GUID":"1s3q1d-s546dq1-8e22e",
"LineId":2,
"SvcId":2,
"Lat":-64.546547,
"Lon":-64.546547,
"TimeStamp":"2021-03-18T08:29:36.758Z",
"Recorder":"dq65ds4qdezzer",
"Env":"DEV"
},
"operator":20404,
"sender":"MSISDN",
"binary":1,
"sent":"2021-03-18T08:29:36.758Z"
}
实际结果:
{
"SequenceNumber":19,
"Offset":"10928",
"EnqueuedTimeUtc":"4/1/2021 8:43:19 AM",
"SystemProperties":{
"x-opt-enqueued-time":{
"long":1617266599145
}
},
"Properties":{
"Postman-Token":{
"string":"37ff4cc6-9124-45e5-ba9d-######e"
}
},
"Body":{
"bytes":"{\r\n \"id\": 1,\r\n \"receiver\": \"2222222222222\",\r\n \"message\": {\r\n \"Name\": \"testing\",\r\n \"PersonId\": 2,\r\n \"CarId\": 2,\r\n \"GUID\": \"1s3q1d-s546dq1-8e22e\",\r\n \"LineId\": 2,\r\n \"SvcId\": 2,\r\n \"Lat\": -64.546547,\r\n \"Lon\": -64.546547,\r\n \"TimeStamp\": \"2021-03-18T08:29:36.758Z\",\r\n \"Recorder\": \"dq65ds4qdezzer\",\r\n \"Env\": \"DEV\"\r\n },\r\n \"operator\": 20404,\r\n \"sender\": \"MSISDN\",\r\n \"binary\": 1,\r\n \"sent\": \"2021-03-29T08:29:36.758Z\"\r\n}"
}
}
这个问题最初是在这个帖子下发布的,因为在最初的问题中出现了另一个问题
如果这不是继续StackOverflow的方法,请随时评论我下次应该如何处理。问候。HTTP请求正文中的JSON文档进入事件中心的消息正文,该消息很快被写入捕获目的地,并带有一些额外的属性,如序列号、偏移量、排队时间、系统属性等 在反序列化时,读取器需要单独使用body对象,它应该是HTTP请求中的同一个body 请随意查看此页面中的事件中心AVRO模式-尝试返回正文:
return func.HttpResponse(json.loads(jsonStr)['body']['bytes'], status_code=200)
这帮助我实现了我想要的。非常感谢。