如何删除生成的 Avro 消息中的冗余嵌套数组?

How can I remove the redundant nested array in my generated Avro message?

我有一个 Avro 架构,其中一部分如下所示:

{
        "name": "products",
        "type": [
          "null",
          {
            "type": "array",
            "items": {
              "name": "products_record",
              "type": "record",
              "fields": [
                {
                  "name": "id",
                  "type": {
                    "type": "string",
                    "logicalType": "uuid"
                  }
                },
                {
                  "name": "status",
                  "type": "string"
                },
                {
                  "name": "error",
                  "type": [
                    "string",
                    "null"
                  ]
                }
              ]
            }
          }
        ],
        "default": null
      }

我的目的是最终得到一条具有 products 键的消息,其中值是一个项目数组,每个项目都有一个 idstatus、并且可能是 error.

我最终得到的是一条具有 products 键的消息,但该值是一个具有 array 键的对象,然后 该键 具有我期望的数组值。

例如

{
  "products": {
    "array": [
      {
        "id": "100",
        "status": "VALID",
        "error": null
      },
      {
        "error": null,
        "id": "200",
        "status": "VALID"
      }
    ]
  }
}

有没有办法更改我的架构,以便我可以摆脱中间 array 密钥,并且用它编码的消息看起来像这样:

{
  "products": [
      {
        "id": "100",
        "status": "VALID",
        "error": null
      },
      {
        "error": null,
        "id": "200",
        "status": "VALID"
      }
   ]
}

change my schema so that I can get rid of the intermediate array key

不要将其设为联合类型/可为空。

{
    "name": "products",
    "type": {
      "type": "array",
      ...

如果需要,您可以使用空列表来推断无数据并在反序列化期间将其设置回 null

查看说明字段类型成为键的规范 - https://avro.apache.org/docs/current/spec.html#json_encoding