【问题标题】:Convert an avro file that was originally a json back to json with Python使用 Python 将最初是 json 的 avro 文件转换回 json
【发布时间】:2021-06-26 21:18:04
【问题描述】:

所以我正在尝试读取通过 HTTP POST 发送到事件中心的 JSON 文件,该事件中心捕获数据并将其转换为 Azure Blob 存储中的 Avro 文件格式,现在我想下载该文件再次使用 Python 将其转换回 JSON 格式。 使用 JSON 序列化程序是唯一的方法吗?

初始 JSON 格式


{
  "id": 1,
  "number": "111111111",
  "payload": {
    "intial": "This is a example",
    "BoxId": 2,
    "PersonId": 2,
    "GUID": "1s3q1d-s546dq1-8e22e",
    "borderId": 2,
    "ServiceId": 2,
    "Lat": -63.546547,
    "Lon": -63.546547,
    "TimeStamp": "2021-03-18T08:29:36.758Z",
    "Recording": "azezaerazre",
    "Env": "TEST"
  },
  "operator": 123456,
  "sender": "MSD",
  "binary": 1,
  "sent": "2021-03-29T08:29:36.758Z"
}

【问题讨论】:

  • 当你问“使用 JSON 序列化程序是唯一的方法吗?”,听起来你正在寻找另一种选择。但是,如果您希望最终结果采用 JSON 格式,那么 JSON 序列化程序不正是您正在寻找的吗?如果您想要 XML 格式,您可能会使用将数据序列化为 XML 的实用程序,对吧?
  • @Scott 我想知道是否还有其他方法,因为我无法使用序列化程序来做到这一点。我对编程很陌生。我查看了“AvroJsonSerializer”,但没有足够的文档来帮助我。

标签: python json type-conversion avro azure-eventhub


【解决方案1】:

下载 Avro 文件后,您应该能够使用 fastavro 并执行以下操作将记录输出为 Avro JSON:

from fastavro import reader, json_writer

with open("json_file.json", "w") as json_file:
    with open("avro_file.avro", "rb") as avro_file:
        avro_reader = reader(avro_file)
        json_writer(json_file, avro_reader.writer_schema, avro_reader)

【讨论】:

  • 谢谢,斯科特!困难在于我通过 Postman 将我的初始 JSON 数据发送到 blob 存储,因此“通常”我无法访问我的初始 JSON 数据。如果我只能访问我的 Avro 文件并且我想再次以 JSON 格式读取它,我应该如何继续?
  • 我相信我发布的代码应该适用于您的情况。 “json_file.json”只是一个占位符,用于表示您想要调用 JSON 文件的任何内容。 “avro_file.avro”是您下载的 avro 文件名称的占位符。
  • 好的,我明白了,我刚刚试了一下,我可以确认它有效,谢谢,Scott!
猜你喜欢
  • 1970-01-01
  • 2020-07-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多