当前位置: 首页 > 知识库问答 >
问题:

用AVRO编码可选字符串

南门嘉
2023-03-14

我使用的是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真的允许可选字符串字段?这是窃听器吗?我错过了什么?

共有1个答案

端木澄邈
2023-03-14

我的理解是否正确,Avro真的允许可选字符串字段?

是的,Avro支持nullstring的联合

我错过了什么?

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