Java 使用AVRO编码可选字符串
我使用的是Avro版本1.10.2 我有以下模式,可选JSON字符串为Java 使用AVRO编码可选字符串,java,avro,Java,Avro,我使用的是Avro版本1.10.2 我有以下模式,可选JSON字符串为optionalField: { "namespace": "foo.bar", "name": "FooBar", "type": "record", "fields": [ { "name": "optionalFiel
optionalField
:
{
"namespace": "foo.bar",
"name": "FooBar",
"type": "record",
"fields": [
{
"name": "optionalField",
"type": [
"null",
"string"
]
}
]
}
我使用Avro-Maven插件来执行代码生成
但是,当我使用以下代码编码此对象的实例时:
FooBar fooBar = FooBar.newBuilder()
.setOptionalField("value")
.build();
Schema schema = fooBar.getSchema();
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
Encoder jsonEncoder = EncoderFactory.get().jsonEncoder(schema, byteArrayOutputStream);
SpecificDatumWriter<Object> writer = new SpecificDatumWriter<>(schema);
writer.write(fooBar, jsonEncoder);
jsonEncoder.flush();
System.out.println(byteArrayOutputStream.toString());
而不是我所期望的:
{"optionalField":"value"}
据我所知,中的任何内容似乎都不意味着只有记录是可选的。此外,根据工会:
如上所述,联合使用JSON数组表示。例如,[“null”,“string”]声明的模式可以是null或string
我的理解正确吗?Avro真的允许可选字符串字段吗?这是虫子吗?我错过了什么
我的理解正确吗?Avro真的允许可选字符串字段吗
是,Avro支持null
和string
我错过了什么
Avro JSON编码器的工作方式与您预期的不同。如中所述,使用类型信息将联合编码为字典,而不仅仅是值。Avro票证跟踪器中有一个悬而未决的问题,它询问您正在寻找的格式,但尚未解决:我在这里发现了一个类似的问题:。我要试一试。与此同时,我把这个问题标记为重复问题。
{"optionalField":"value"}