跳到主要內容

關於Go的JSON序列化、反序列化遇到的一些坑

 

用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"`
}

留言

這個網誌中的熱門文章

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

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