json encoding of avro union



我的 avro 模式中有一个联合favorite_number可以是空或整数。当我对对象进行 json 编码时,我得到:

{"name": "Alyssa", "favorite_number": {"int": 7}, "favorite_color": null}

我试图摆脱联合的类型指示器,在本例中为 int,以便它变成:

{"名称": "Alyssa", "favorite_number": 7, "favorite_color": "蓝色"}

阿夫罗模式:

{"name": "person", "type": "record",
"fields": [
{"name": "name", "type": "string"},
{"name": "favorite_number", "type": ["null", "int"], "default": null},
{"name": "favorite_color", "type": "string"}
]
}

有没有办法做到这一点?谢谢!

编辑整个答案:)

看起来不可能直接使用 Avro API 做到这一点。有一段时间的拉取请求挂起以支持可空类型的拉取请求

https://issues.apache.org/jira/browse/AVRO-1582

编辑:

根据您的评论,我发现了同样的问题,试图在没有数据类型的情况下进行序列化,我最终使用了 https://avro.apache.org/docs/1.8.1/api/java/org/apache/avro/generic/GenericData.html#toString(java.lang.Object( 中定义的 toString 函数,它无法正常工作的唯一情况是具有循环引用的模式。

我想知道传入的 JSON 有效负载是否像这样 { "名字": "艾丽莎", "favorite_number": 7, "favorite_color":"蓝色" } 添加数据类型并获取更新的 JSON 数据以适应 Avro Union 要求的简单方法是什么。 { "名字": "艾丽莎", "favorite_number":{ "int": 7 }, "favorite_color":空 } 提前谢谢。