Преобразование JSONObject в avro GenricRecord с помощью схемы - PullRequest
0 голосов
/ 18 апреля 2020

Возникает проблема при преобразовании JSONObject в GenericRecord для свойства пустого поля по умолчанию в Java.

У меня есть схема ниже.

org.apache.avro.Schema = {"type":"record","name":"Foo","namespace":"$iw","fields":[{"name":"bar","type":{"type": "string", "avro.java.string": "String"},"default": null}]}

Если я предоставляю правильное значение, он успешно запущен

String json1 = {"bar": "baz"}
GenericDatumReader reader = new GenericDatumReader<>(STREAM_VALUE_SCHEMA);
Decoder jsonDecoder = DecoderFactory.get().jsonDecoder(Schema, json2.toString());
GenericRecord record = reader.read(null, jsonDecoder);

Когда я указал ниже строку

String json2 = "{}";
GenericDatumReader reader = new GenericDatumReader<>(STREAM_VALUE_SCHEMA);
Decoder jsonDecoder = DecoderFactory.get().jsonDecoder(Schema, json2.toString());
GenericRecord record = reader.read(null, jsonDecoder);

Я получаю ниже исключения: -

Expected string. Got END_OBJECT
org.apache.avro.AvroTypeException: Expected string. Got END_OBJECT
at org.apache.avro.io.JsonDecoder.error(JsonDecoder.java:698)
at org.apache.avro.io.JsonDecoder.readString(JsonDecoder.java:227)

Справка действительно!

...