跳到主要內容

【程式語言 — Go】關於JSON序列化、反序列化

 

會撰寫這個篇章主要是使用Go語言進行軟體開發時發現到原來跟我們熟悉的Javascript差異這麼多,在Javascript的世界裡很容易對JSON格式的資料進行處理,但不同的是Golang是一種靜態語言,預設不希望我們動態的去擴增屬性,這樣比較安全,但也帶來了一些麻煩,比如說某些不該被過濾掉的卻被過濾掉了,跟我們所預期的結果不同,而以下就是一個簡單的案例,我們希望值雖為false仍需要被保留,才能正常進行運算,但預設的情況下卻沒這麼美好,總會有一些坑要踩,就讓我們來看看到底是什麼樣的坑吧!

用omitempty來過濾掉空的property造成bool false被過濾掉

一般來說我們會這樣定義Struct來接收前端請求的POST Body
type UpdateReq struct { Name string `json:"name,omitempty" bson:"name,omitempty"` Enabled bool `json:"enabled,omitempty" bson:"enabled,omitempty"` }
那假設POST Body是這樣
{ enabled: false }
此時我們利用gin的BindJSON來Unmarshal
var body domain.UpdateReq c.BindJSON(&body)
結果印出來會是
{ }
上述結果的name被我們過濾掉是正常,但enabled就我們的需求上來看,不應該被過濾掉才對。
所以我們應該將bool、int這類的型態宣告為指標,如下:
type UpdateReq struct { Name string `json:"name,omitempty" bson:"name,omitempty"` Enabled *bool `json:"enabled,omitempty" bson:"enabled,omitempty"` }
結果如我們的預期
{ enabled: false }

留言

這個網誌中的熱門文章

java西元民國轉換_各種不同格式

C#資料庫操作(新增、修改、刪除、查詢)