[Scala] play架構使用tree結構json « Terrence的宅宅幻想
阿新 • • 發佈:2018-12-29
今天想用樹狀結構去顯示Presto裡面的table source
使用的API是吃json的格式
對應到目前開發中的scala play project,就面臨到了如何做格式轉換的問題
目前是將資料庫裡面catalog, schema, table等資訊用TableData這個物件封裝起來
ㄧ開始想的很簡單,轉成list/map的組合用內建的toJson函式去解就好了
但是馬上就出了問題
當單純使用List/Map的時候其實沒問題,但這邊問題出在Map使用了不同的data type當value
不同的data type當value時, scala直接把它統一看成java.io.Serializable
這樣怎麼辦呢?只好自己製作json writer
先自制一個TreeNode資料結構, 然後將原先List/Map資料轉換改成TreeNode的格式
之後補上一段轉換json的code, 使用lazyWrite做recursive的tree結構處理
但是這時候跑出了一段錯誤訊息
原來問題出在TreeNodeWrite在宣告的同時就讓它被lazyWrite使用出的錯誤
後來找到的解法是可用 lazy 去關鍵字去解決這問題
加上延遲處理的判斷之後就可以順利執行了
*補充
這段code還有個小問題,就是最後一定會把nodes屬性傳給前端
前端需要一個處理把空的nodes給移除掉