【问题标题】:Avro allow blank JSON/hash for nested attributesAvro 允许嵌套属性的空白 JSON/哈希
【发布时间】:2018-11-19 12:36:12
【问题描述】:

需要为此创建 Avro 架构 ->

 {"city":"XXXXXX", "brand":"YYYY", "discount": {} }
 {"city":"XXXXXX", "brand":"YYYY", "discount": {"name": "Freedom", "value": 100} }
 {"city":"XXXXXX", "brand":"YYYY", "discount": {"name": "Festive Sale", "value": 100} }

我尝试了以下 shemas,但不起作用:

    { "type":"record", "name":"simple_avro", 
      "fields":[ { "name":"city", "type":"string" }, 
                 { "name":"brand", "type":"string" }, 
                 { "name":"discount",
                   "type":{ "type":"record", "name":"discount", "default":"",  
                     "fields":[ { "name":"discount_name", "type":"string", "default":"null" }, 
                                { "name":"discount_value", "type":"float", "default":0 } 
                              ] }} 
               ] }

对于折扣字段,我尝试默认为"[]", "{}", "",但这些都不起作用。

【问题讨论】:

    标签: schema avro


    【解决方案1】:

    我认为在任何情况下都不允许空的{} 对象,但是如果您根本不想允许任何对象,那么它需要是a union type,由类型的数组指定,默认值位于外部字段而不是记录体内部

    { "name":"discount",
      "type" : [
        "null", 
        { "type":"record", "name":"discount", "fields": [...] } 
      ], 
      "default" : "null"
    

    总的来说,我觉得in IDL format表达更容易

    那么,一个有效的消息可能是{"city":"XXXXXX", "brand":"YYYY"}

    【讨论】:

    • 确实不允许{}。不完全是一个解决方案,但我实施的一种解决方法是我使用 map 而不是记录,这允许 {},但随后我不得不将所有元素的数据类型更改为字符串。
    猜你喜欢
    • 2015-07-19
    • 2021-10-12
    • 2020-01-17
    • 1970-01-01
    • 1970-01-01
    • 2013-04-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-24
    相关资源
    最近更新 更多