我使用的是Avro版本1.10.2
我有以下模式,optionalfield
作为可选JSON字符串:
{
"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":{"string":"value"}}
而不是我所期望的:
{"optionalField":"value"}
据我所知,Avro规范中似乎没有任何内容暗示只有记录可以是可选的。此外,根据工会:
如上所述,联合是使用JSON数组表示的。例如,[“null”,“string”]声明一个模式,该模式可以是null或字符串。
我的理解是否正确,Avro真的允许可选字符串字段?这是窃听器吗?我错过了什么?
我的理解是否正确,Avro真的允许可选字符串字段?
是的,Avro支持null
和string
的联合
我错过了什么?
Avro JSON编码器的工作方式与您预期的不同。正如https://avro.apache.org/docs/current/spec.html#json_encoding中提到的,联合是以类型信息作为字典而不是仅仅以值来编码的。Avro ticket tracker中有一个悬而未决的问题,它要求您查找的格式,但尚未解决:https://issues.apache.org/jira/browse/avro-1582
我使用的是Avro版本1.10.2 我有以下模式,作为可选JSON字符串: 我使用Avro Maven插件来执行代码生成。 但是,当我使用以下代码对此对象的实例进行编码时: 输出为: 而不是我所期望的: 据我所知,Avro规范中似乎没有任何内容暗示只有记录可以是可选的。此外,根据工会: 如上所述,联合是使用JSON数组表示的。例如,[“null”,“string”]声明一个模式,该模式可以是nul
So do not worry about tomorrow, for tomorrow will bring worries of its own. Today's trouble is enough for today. (MATTHEW 6:34) 字符编码 其实,标题前面应该加两个字——“坑爹”。 在实践中,字符编码的确是一个“坑”。因为这个世界上,不都是英文。如果都是英文,就没有这个问题
问题内容: ’=?KOI8-R?B?W1JFUS0wMDI1NDEtNDc5NzddIO / h7yAi89TSz8rGwdLGz9IiIDs =?= \ r \ n \ t =?KOI8-R?B?Ry43MjkgKDEwKQ ==?=’ 如何将其转换为可读的内容?谢谢 ! 问题答案: email.header.decode_header(‘=?KOI8-R?B?W1JFUS0wMDI1NDEtN
问题内容: Linux / x86_64上的GCC 4.7是否具有默认字符编码,通过它可以验证和解码C源文件中字符串文字的内容?这是可配置的吗? 此外,将字符串文字从字符串文字链接到输出的数据部分时,它是否具有默认的执行字符编码?这是可配置的吗? 在任何配置中,源字符编码都可能与执行字符编码不同吗?(那gcc会在字符编码之间进行代码转换吗?) 问题答案: 我不知道这些选项的实际效果如何(不使用at
问题内容: 我收到一个json数据对象,然后从中提取一个字符串 然后我尝试使该字符串适合在URL中使用 但它不起作用 如果我对newCountryString进行了硬编码,它将起作用,为什么呢? 问题答案: 用这个 - 此代码将使用给定的编码返回接收方的表示形式,以确定将接收方转换为合法URL字符串所需的转义百分比。 有关更多详细信息:https : //developer.apple.com/d
字符编码 我们已经讲过了,字符串也是一种数据类型,但是,字符串比较特殊的是还有一个编码问题。 因为计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理。最早的计算机在设计时采用8个比特(bit)作为一个字节(byte),所以,一个字节能表示的最大的整数就是255(二进制11111111=十进制255),如果要表示更大的整数,就必须用更多的字节。比如两个字节可以表示的最大整数是655