首頁 >後端開發 >Golang >為什麼嵌入式結構的 JSON 解組會導致意外行為?

為什麼嵌入式結構的 JSON 解組會導致意外行為?

Linda Hamilton
Linda Hamilton原創
2024-11-07 03:12:02765瀏覽

Why does JSON Unmarshaling of Embedded Structs Lead to Unexpected Behavior?

JSON 解組嵌入結構探索

嘗試將 JSON 物件解組到具有嵌入欄位的結構時,可能會出現意外行為。為了說明這一點,請考慮以下結構體定義:

<code class="go">type Outer struct {
    Inner
    Num int
}

type Inner struct {
    Data string
}

func (i *Inner) UnmarshalJSON(data []byte) error {
    i.Data = string(data)
    return nil
}</code>

使用json.Unmarshal(data, &Outer{}) 將JSON 物件解組到Outer 實例中只會填入Inner 字段,而Num 字段保持不變。這可以歸因於 JSON 解組嵌入字段的方式。

要解決此問題,建議將嵌入欄位設為父結構中的明確欄位。此修改允許 JSON 解組器直接存取和解組該欄位。以下是修正後的結構體定義:

<code class="go">Outer struct {
    I Inner // make Inner an explicit field
    Num int `json:"Num"`
}</code>

在此更新版本中,內部欄位成為名為 I 的明確欄位。此外,Num 欄位使用 json:"Num" 進行標記,以確保 JSON 鍵「Num」在解組期間會對應到此欄位。

透過採用此方法,當 JSON 物件解組到 Outer 實例時,I 和 Num 欄位都會被正確填入。

以上是為什麼嵌入式結構的 JSON 解組會導致意外行為?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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