首頁 > 後端開發 > Golang > 在 Go 中解組 JSON 時如何處理變數數組回傳?

在 Go 中解組 JSON 時如何處理變數數組回傳?

Susan Sarandon
發布: 2024-12-12 12:49:10
原創
250 人瀏覽過

How to Handle Variable Array Returns When Unmarshalling JSON in Go?

使用變數陣列傳回解組JSON

從外部來源擷取JSON 時,回應的結構可能會有所不同,這使得解組具有挑戰性到一個固定的Go 結構體。當 JSON 可能包含相同屬性的陣列或單一物件時,這一點尤其明顯。

在提供的範例中,JSON 回應包含一個名為「gwrcmd」的屬性,該屬性可以是物件數組,也可以是單一的物件。為了解決這個問題,一種方法是建立第二個結構,其欄位與原始結構相同,但帶有「gwrcmd」屬性的切片。但是,可以使用 json.RawMessage 實現更靈活的解決方案。

json.RawMessage 允許將未知類型解組為原始 JSON 字串。此功能可用於查看 JSON 並確定將其解組為相應 Go 類型的適當方法。

考慮以下簡化範例:

type Response struct {
    RawAWrapper struct {
        RawA json.RawMessage `json:"a"`
    }
    A  A   `json:"-"`
    As []A `json:"-"`
}

type A struct {
    B string
}

func (r *Response) UnmarshalJSON(b []byte) error {
    if err := json.Unmarshal(b, &r.RawAWrapper); err != nil {
        return err
    }
    if r.RawAWrapper.RawA[0] == '[' {
        return json.Unmarshal(r.RawAWrapper.RawA, &r.As)
    }
    return json.Unmarshal(r.RawAWrapper.RawA, &r.A)
}
登入後複製

在此範例中, json.RawMessage 欄位 RawA 擷取「a」屬性的 JSON 值。根據原始 JSON 的第一個位元組,我們可以確定該值是數組([])還是物件(“{”)。然後,使用此資訊將值解組到 A 結構(對於物件)或 As 切片(對於陣列)中。

此方法提供了一種更靈活、更健壯的方法來處理具有可變結構的 JSON 響應。它消除了對重複結構的需要,並允許基於 JSON 內容進行動態解組。

以上是在 Go 中解組 JSON 時如何處理變數數組回傳?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板