2017-09-28 24 views
0

實際上,我正在使用AVRO驗證json有效內容。我試圖聲明一個字段(定義爲記錄)可選,但它不起作用。獲取AvroTypeException:未知的工會分支

模式

... 
    { 
     "name" : "buildarea", 
     "type" : "com.data.Area", 
     "type" : ["null","com.data.Area"], 
     "default": null 
    } 
... 

定義爲

{ 
    "type": "record", 
    "namespace": "com.data", 
    "name": "Area", 
    "fields": [ 
     { 
      "name": "start", 
      "type": "double" 
     }, 
     { 
      "name": "end", 
      "type": "double" 
     } 
    ] 
} 

Json的例子

如果我定義了一個不爲空值,我得到一個異常區:未知工會分支開始

"buildarea": { 
    "start": 10.20, 
    "end": 15 
} 

如果我將該字段設置爲空例如「buildarea」:null,我收到一條異常消息:預期的記錄開始。有VALUE_NULL

"buildarea": null 

如果我刪除了可選的規格在架構即

... 
    { 
     "name" : "buildarea", 
     "type" : "com.data.Area" 
    } 
... 

我必須定義一個非空「buildarea」的對象,這是不正確的期望所有的時間,即buildarea也許空值。

有人可以給我一個提示來解決這個問題嗎?

回答

0

你必須定義你的類型只有一次,使它可以爲空,而不是兩次。像這樣

{ 
    "name" : "buildarea", 
    "type" : ["null","com.data.Area"], 
    "default": null 
} 
+0

確實。在測試/嘗試複製和粘貼狂歡之後,第一個未被刪除。 –