在Go 中處理JSON 編組中的巢狀空結構
使用簡介
使用簡介使用編碼時Go 中的/json 套件用於將結構編組為JSON, “,omitempty”標籤可用於從結果 JSON 中排除空白欄位。但是,對於嵌套結構,此標記的行為可能不符合預期。
type ColorGroup struct { ID int `json:",omitempty"` Name string Colors []string } type Total struct { A ColorGroup `json:",omitempty"` B string `json:",omitempty"` } group := Total{ A: ColorGroup{}, } json.Marshal(group)問題
考慮以下範例:
在這種情況下, JSON 輸出應僅包含B 字段,因為A 字段為空。但是,輸出仍然包含具有空值的 A 欄位 ({"A": {"Name": "", "Colors": null}, "B": null})。Nil 指標
零值(例如false、0)
type ColorGroup struct { ID int `json:",omitempty"` Name string Colors []string } type Total struct { A *ColorGroup `json:",omitempty"` B string `json:",omitempty"` } group := Total{ B: "abc", } json.Marshal(group)
在提供的範例中,group.A 是一個空結構,不是零指標或集合類型(例如切片、映射)。因此,封送拆收器不會將其視為空值。
要實現所需的行為,可以使用指向巢狀結構的指標:
透過此修改,JSON輸出將只包含 B 欄位:{"B": "abc"}.以上是在 Go 中封送至 JSON 時如何正確處理巢狀空結構?的詳細內容。更多資訊請關注PHP中文網其他相關文章!