Edited at

Structをomitemptyする方法

More than 1 year has passed since last update.

↓こんなStructがあったとして、JSONに変換した時にOrderItemプロパティが空だったら、JSONから省略したい。

HogeSales struct {

IsDirty bool `json:"-"`
Id string `json:"Id,omitempty"`
Amount int `json:"Amount,omitempty"`
OrderItem OrderItem `json:"OrderItem,omitempty"`
}

json.Marshal(HogeSales) でJSONに変換した時に "OrderItem": {} となることを防ぐ方法。

このOrderItem項目すら消したい場合。

ちなみに omitempty される条件は下記

false, 0, any nil pointer or interface value, and any array, slice, map, or string of length zero

そう、Struct型である以上、Omitされない。。。

対処方法は簡単 Pointer にして nil を入れておけばOK

HogeSales struct {

IsDirty bool `json:"-"`
Id string `json:"Id,omitempty"`
Amount int `json:"Amount,omitempty"`
OrderItem *OrderItem `json:"OrderItem,omitempty"`
}

func (h *HogeSales) Clear() {
h.OrderItem = nil
}