2017-08-10 29 views
0

我在我的avro架构中为favorite_number可能是null或int。当我JSON编码的对象,我得到:json avro union的编码

{ “名”: “贾静雯”, “favorite_number”:{ “INT”:7}, “favorite_color”:空}

我试图摆脱对于联合类型的指示器,在这种情况下的整型,使其变成:

{ “名称”: “阿莉莎”, “favorite_number”:7, “favorite_color”: “蓝”}

avro schema:

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

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

+0

你应该显示一些代码你是怎么做到的? –

+0

你有没有得到如何解决这个问题? – Prashanth

回答

0

编辑全部答案:)

它看起来是不可能直接与Avro的API做。有一会儿挂起pull请求支持这一对可空类型

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函数,它不能正常工作的唯一情况是具有循环引用的模式。

+0

我不确定你的意思 - 请你详细说明 – eng007

+0

谢谢你的回答,但是我的问题是不一样的。它不需要使用avro模式,而是使用基于avro模式的json序列化。所以当我在我的模式中有一个联合时,我想基于模式的序列化的json不包含类型信息。 '{“name”:“Alyssa”,“favorite_number”:{“int”:7},“favorite_color”:null} 我想摆脱联合的类型指示器,在这种情况下,int,所以它变成: {“name”:“Alyssa”,“favorite_number”:7,“favorite_color”:“blue”}' – eng007

+0

@ eng007嘿,我也有同样的问题,你找到解决方案吗? –