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中文網其他相關文章!