首頁  >  文章  >  後端開發  >  如何將帶有動態鍵的 JSON 解組到 Go 中的結構欄位?

如何將帶有動態鍵的 JSON 解組到 Go 中的結構欄位?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-11-16 00:07:03509瀏覽

How to Unmarshal JSON with Dynamic Keys into Struct Fields in Go?

將動態鍵解組到Go 中的結構字段

當處理不符合預定結構的JSON 資料時,解組變得更加困難具有挑戰性的。在這種情況下,您有一個名為「things」的物件中包含動態鍵的 JSON 設定檔。

要解決此問題,一種解決方案是在結構中使用映射來捕獲動態鍵。下面是一個範例:

type X struct {
    Things map[string]Thing
}

type Thing struct {
    Key1 string
    Key2 string
}

「Things」字段不是為每個鍵定義特定的結構體字段,而是儲存鍵值對的映射,其中鍵是動態鍵。

要使用此方法解組 JSON 數據,您可以執行以下操作:

var x X
if err := json.Unmarshal(data, &x); err != nil {
    // handle error
}

這會將 JSON解組到“X”結構中,並將動態鍵映射到其中適當的結構實例

但是,如果您仍然希望將鍵值作為結構體中的字段而不是地圖鍵的一部分,則可以使用以下方法:

type Thing struct {
    Name string `json:"-"` // <-- add this field
    Key1 string
    Key2 string
}

...

// Update the name field after unmarshalling
for k, t := range x.Things {
    t.Name = k
    x.Things[k] = t
}

這涉及在「Name」欄位中新增一個「-`json」標籤,以在解組過程中忽略它。解組後,使用循環將動態鍵指派給映射中每個結構實例的「Name」欄位。

以上是如何將帶有動態鍵的 JSON 解組到 Go 中的結構欄位?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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