首頁 > 後端開發 > Golang > 如何在 Go 中使用動態鍵解組 JSON?

如何在 Go 中使用動態鍵解組 JSON?

Mary-Kate Olsen
發布: 2024-12-01 19:25:20
原創
314 人瀏覽過

How to Unmarshal JSON with Dynamic Keys in Go?

Viper/JSON 解組中的動態金鑰處理

處理偏離格式的JSON 資料預定時,Go 中的解組可能具有挑戰性。考慮一個帶有動態鍵的JSON 配置文件,如下所示:

{
  "things" :{
    "123abc" :{
      "key1": "anything",
      "key2" : "more"
    },
    "456xyz" :{
      "key1": "anything2",
      "key2" : "more2"
    },
    "blah" :{
      "key1": "anything3",
      "key2" : "more3"
    }
  }
}
登入後複製

要將這些資料解組到帶有動態鍵的Go 結構體中,一種方法是使用映射:

type X struct {
    Things map[string]Thing
}

type Thing struct {
    Key1 string
    Key2 string
}
登入後複製

透過使用map[string]Thing,產生的結構可以處理任意數量的動態鍵。使用以下方式解組資料:

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

此方法允許直接解組 JSON 和 Viper 中的動態鍵(使用 viper.Get("things") 取得 Thing 值陣列)。

但是,如果金鑰本身必須是結構體的成員,則可以使用解組後循環來更新fields:

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

// Fix the name field after unmarshal
for k, t := range x.Things {
    t.Name = k
    x.Things[k] = t
}
登入後複製

這允許將鍵合併到結構中,同時保留JSON 資料的原始動態性質。

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

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