首頁 >後端開發 >Golang >如何在 Go 中使用動態數組結構高效解組 JSON?

如何在 Go 中使用動態數組結構高效解組 JSON?

Linda Hamilton
Linda Hamilton原創
2024-12-21 14:43:11642瀏覽

How to Efficiently Unmarshal JSON with Dynamic Array Structures in Go?

使用動態陣列結構解群組JSON

從第三方來源擷取JSON 資料時,資料結構可能會有所不同,有時包含數組和有時不是。在使用 Go 的 json.Unmarshal 函數時,這可能會帶來挑戰,因為它需要特定的結構來匹配 JSON 結構。

處理此問題的常見方法是建立帶有切片的輔助結構,例如:

type ResponseWithSlice struct {
    Gwrcmds struct {
        Gwrcmd []struct { // Nested struct now a slice
            Gcmd  string
            Gdata struct {
                Gip struct {
                    Version string
                }
            }
        }
    }
}

這是可行的,但它涉及複製結構,這可能很麻煩。

更通用的解決方案涉及使用json.RawMessage:

type Response struct {
    RawGwrcmd json.RawMessage `json:"gwrcmds"`
}

透過這種方法,gwrcmds 欄位儲存為原始JSON 訊息,允許我們查看它並相應地解組它:

func (r *Response) UnmarshalJSON(b []byte) error {
    if err := json.Unmarshal(b, &r.RawGwrcmd); err != nil {
        return err
    }
    if r.RawGwrcmd[0] == '[' { // Check if it's an array
        return json.Unmarshal(r.RawGwrcmd, &r.Gwrcmds.Gwrcmd)
    }
    return json.Unmarshal(r.RawGwrcmd, &r.Gwrcmds.Gwrcmd) // Otherwise, treat it as a single struct
}

此方法允許我們處理陣列和非陣列結構,而不需要額外的結構。

以上是如何在 Go 中使用動態數組結構高效解組 JSON?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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