使用 Viper 和 Go 結構解組動態 JSON 鍵
在 Go 中,使用動態鍵處理 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 }
定義結構後,您可以解組像這樣的JSON 資料:
var x X if err := json.Unmarshal(data, &x); err != nil { // handle error }
如果物件鍵的名稱應該是「Thing」結構的字段,您可以新增一個循環來在解組後分配它:
// Fix the name field after unmarshal for k, t := range x.Things { t.Name = k x.Things[k] = t }
或者,可以使用自訂JSON 解碼器透過重寫「Decode」方法來處理動態鍵。有關此方法的更多詳細信息,請參閱 Go 官方文檔。
透過這些技術,您可以有效地將動態 JSON 鍵解群組到 Go 結構中,從而使您能夠處理複雜的設定檔和資料結構。
以上是如何使用 Viper 和 Go 結構解組動態 JSON 鍵?的詳細內容。更多資訊請關注PHP中文網其他相關文章!