在 Go 中,處理結構欄位中的動態 JSON 鍵可能具有挑戰性。讓我們深入研究這個問題,並使用 Viper 函式庫提供一個全面的解決方案。
問題陳述
考慮一個有動態鍵的JSON 設定檔:
{ "things" :{ "123abc" :{ "key1": "anything", "key2" : "more" }, "456xyz" :{ "key1": "anything2", "key2" : "more2" }, "blah" :{ "key1": "anything3", "key2" : "more3" } } }
要將這個設定解析為結構體,可以設定這個設定檔定義:
type Thing struct { Name string `?????` Key1 string `json:"key2"` Key2 string `json:"key2"` }
但是,問題出現了:如何將動態鍵解組為結構體欄位名稱?
解決方案
要處理動態鍵,請考慮使用映射:
type X struct { Things map[string]Thing } type Thing struct { Key1 string Key2 string }
解組如下:
var x X if err := json.Unmarshal(data, &x); err != nil { // handle error }
Playground 範例
如果鍵必須是結構體的成員,則可以在解組後使用循環添加它:
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 }
Playground 範例
使用這些技術,您可以有效地將動態JSON 鍵解組到Go 中的結構欄位中,即使使用像Viper 這樣的函式庫也是如此。
以上是如何在 Go 中將動態 Viper 或 JSON 鍵解組為結構欄位?的詳細內容。更多資訊請關注PHP中文網其他相關文章!