在 Avro 模式中,如何将数组包装到一个对象并将其作为联合而不是将数组作为联合

In Avro schema, how to wrap the array to an object and put it as a union instead of putting just array as union

我有以下数据,我想将 OPTIONAL 数组包装为一个对象,然后作为一个联合放入,但由于我是新手,所以我不确定该怎么做。

到目前为止我就是这样做的,所以有人可以帮助我更正预期输出中的以下结构。请注意,此 dataRefs 是一个可选字段,整个结构可能存在也可能不存在。

{
      "name": "dataRefs",
      "default": null,
      "type": ["null", 
        {
          "type": "array",
          "items": {
            "name": "dataRef",
            "type": "record",
            "fields": [
              {
                "name": "dataId",
                "type": "string",
                "avro.java.string": "String"
              },
              {
                "name": "email",
                "type": ["null" ,"string"],
                "avro.java.string": "String"
              },
              {
                "name": "phone",
                "type": ["null" ,"string"],
                "avro.java.string": "String"
              },
              {
                "name": "userName",
                "type": ["null" ,"string"],
                "avro.java.string": "String"
              },
              {
                "name": "addressRef",
                "default": null,
                "type": ["null", {
                  "name": "addressRefRecord",
                  "type": "record",
                  "fields": [
                    {
                      "name": "addrRefId",
                      "type": ["null","string"],
                      "avro.java.string": "String"
                    },
                    {
                      "name": "addrType",
                      "type": ["null","string"],
                      "avro.java.string": "String"
                    },
                    {
                      "name": "addressLine1",
                      "type": ["null","string"],
                      "avro.java.string": "String"
                    },
                    {
                      "name": "addressLine2",
                      "type": ["null","string"],
                      "avro.java.string": "String"
                    },
                    {
                      "name": "city",
                      "type": ["null","string"],
                      "avro.java.string": "String"
                    },
                    {
                      "name": "province",
                      "type": ["null","string"],
                      "avro.java.string": "String"
                    },
                    {
                      "name": "country",
                      "type": ["null","string"],
                      "avro.java.string": "String"
                    },
                    {
                      "name": "postalCode",
                      "type": ["null","string"],
                      "avro.java.string": "String"
                    }  
                  ]
                }
                ]
              }
            ]
          }
        }
      ]
    }

我打算映射到上述架构的 JSON 数据如下所示:

"dataRefs": [{
          "addressRef": {
            "addrRefId": "0",
            "addrType": "ADDRESS",
            "addressLine1": "DA 81",
            "addressLine2": "",
            "city": "Amsterdam",
            "country": "Netherlands",
            "postalCode": "xxxx LN",
            "province": ""
          },
          "dataId": "0",
          "email": "xyz@abc.com"
        }],

我是这样做到的:

{
      "name": "dataRefs",
      "type": [
        "null",
        {
          "type": "record",
          "name": "dataRefsObject",
          "fields": [
            {
              "name": "dataRefsArray",
              "type": {
                "type": "array",
                "items": {
                  "name": "dataRef",
                  "type": "record",
                  "fields": [
                    {
                      "name": "dataId",
                      "type": ["null", "string"],
                      "avro.java.string": "String"
                    },
                    {
                      "name": "userName",
                      "type": [
                        "null",
                        "string"
                      ],
                      "avro.java.string": "String"
                    },
  ....