Avro java 序列化为 json 无法正常工作

Avro java serialization as json not working correctly

我有一个简单的 avro 架构,我使用 avro-maven-plugin 从中生成了 java class。

avro架构如下:

{
    "type": "record",
    "name": "addressGeo",
    "namespace": "com.mycompany",
    "doc": "Best record address and list of geos",
    "fields": [

    {
        "name": "version",
        "type": "int",
        "default": 1,
        "doc": "version the class"
    },
    {
        "name": "eventType",
        "type": "string",
        "default": "addressGeo",
        "doc": "event type"
    },
    {
        "name": "parcelId",
        "type": "long",
        "doc": "ParcelID of the parcel. Join parcelid and sequence with ParcelInfo"
    },
    {
        "name": "geoCodes",
        "type": {"type": "array", "items": "com.mycompany.geoCode"},
        "doc": "Multiple Geocodes, with restrictions information"
    },
    {
        "name": "brfAddress",
        "type": ["null", "com.mycompany.address"],
        "doc": "Address cleansed version of BRF"
    }
    ]
}

如果我使用生成器构建一个简单的对象,并使用 json 对其进行序列化,我将得到以下输出:

{
  "version": 1,
  "eventType": {
    "bytes": [
      97,
      100,
      100,
      114,
      101,
      115,
      115,
      71,
      101,
      111
    ],
    "length": 10,
    "string": null
  },
  "parcelId": 1,
  "geoCodes": [
    {
      "version": 1,
      "latitude": 1,
      "longitude": 1,
      "geoQualityCode": "g",
      "geoSourceTypeID": 1,
      "restrictions": "NONE"
    }
  ],
  "brfAddress": {
    "version": 1,
    "houseNumber": "1",
    "houseNumberFraction": null,
    "streetDirectionPrefix": null,
    "streetName": "main",
    "streetSuffix": "street",
    "streetDirectionSuffix": null,
    "fullStreetAddress": "1 main street, seattle, wa, 98101",
    "unitPrefix": null,
    "unitNumber": null,
    "city": "seattle",
    "state": "wa",
    "zipCode": "98101",
    "zipPlusFour": null,
    "addressDPV": "Y",
    "addressQualityCode": "good",
    "buildingNumber": "1",
    "carrierRoute": "t",
    "censusTract": "c",
    "censusTractAndBlock": "b",
    "dataCleanerTypeID": 1,
    "restrictions": "NONE"
  }
}

注意 eventType 字段的输出。它以字节数组的形式出现,而字段的类型是 CharSequence。

知道序列化为什么这样做吗?它适用于其他类型的字符串。

我正在使用 google-gson 将对象序列化为 json。

您可能正在使用旧版本的 avro,它使用 CharSequence。理想的字符串类型应该是 java 字符串类型。我建议更新 avro 版本或看看这个 - Apache Avro: map uses CharSequence as key