У меня есть следующая схема avro
{
"type":"record",
"name":"test",
"namespace":"test.name",
"fields":[
{"name":"items","type":
{"type":"array",
"items":
{"type":"record","name":"items",
"fields":[
{"name":"name","type":"string"},
{"name":"state","type":"string"}
]
}
}
},
{"name":"firstname","type":"string"}
]
}
когда я использую декодер Json и кодировщик avro для кодирования данных Json:
val writer = new GenericDatumWriter[GenericRecord](schema)
val reader = new GenericDatumReader[GenericRecord](schema)
val baos = new ByteArrayOutputStream
val decoder: JsonDecoder = DecoderFactory.get.jsonDecoder(schema, json)
val encoder = EncoderFactory.get.binaryEncoder(baos, null)
val datum = reader.read(null, decoder)
writer.write(datum, encoder)
encoder.flush()
val avroByteArray = baos.toByteArray
сценарий 1: когда я передаю следующий json для кодирования, он работает нормально:
{
"items": [
{
"name": "dallas",
"state": "TX"
}
],
"firstname":"arun"
}
сценарий 2: когда я передаю дополнительный атрибут в json на корневом уровне (фамилия), он может кодировать и работает нормально:
{
"items": [
{
"name": "dallas",
"state": "TX"
}
],
"firstname":"fname",
"lastname":"lname"
}
сценарий 3: когда я добавляю дополнительный атрибут в запись массива (страна), возникает следующее исключение:
Expected record-end. Got FIELD_NAME
org.apache.avro.AvroTypeException: Expected record-end. Got FIELD_NAME
at org.apache.avro.io.JsonDecoder.error(JsonDecoder.java:698)
{
"items": [
{
"name": "dallas",
"state": "TX",
"country":"USA"
}
],
"firstname":"fname",
"lastname":"lname"
}
Мне нужно, чтобы сценарий № 3 работал, любая помощь будет отличной.