首頁 >後端開發 >Golang >在 Go 中封送至 JSON 時如何正確處理巢狀空結構?

在 Go 中封送至 JSON 時如何正確處理巢狀空結構?

Susan Sarandon
Susan Sarandon原創
2024-12-18 06:41:10560瀏覽

How Do I Properly Handle Nested Empty Structs When Marshaling to JSON in Go?

在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})。

    答案
  • Go 中json 編組的文檔指出,如果結構體字段滿足以下條件,則將其視為空:是:

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"}.
  • 注意:
如果傳遞了指向非零結構的指針,它將包含在JSON 輸出中,即使如果為空。 此解只能應用於巢狀結構。對於非嵌套空結構,使用不含指標的“,omitempty”標籤就足夠了。

以上是在 Go 中封送至 JSON 時如何正確處理巢狀空結構?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn