Go是一門編譯型語言,適用于開發高性能、可靠性和可維護性強的應用程序。其中,對于JSON數據的處理也是非常高效的。但在實際開發中,我們經常會遇到未知結構的JSON數據,這時該怎么處理呢?下面介紹一些處理未知結構JSON的方法。
首先需要引入encoding/json包,用于解析JSON數據。在處理未知結構的JSON時,可以使用map[string]interface{}類型或[]interface{}類型來存儲數據。
data := []byte(`{"name":"foo","age":20,"isMale":true,"hobbies":["reading","music"],"address":{"province":"Beijing","city":"Haidian"}}`) var obj map[string]interface{} err := json.Unmarshal(data, &obj) if err != nil { fmt.Println("JSON數據解析失敗:", err) return }
此時,數據已經解析到map[string]interface{}類型的obj中。可以通過遍歷obj來獲取數據。
for k, v := range obj { switch value := v.(type) { case string: fmt.Printf("%v:%v\n", k, value) case bool: fmt.Printf("%v:%v\n", k, value) case float64: fmt.Printf("%v:%v\n", k, value) case []interface{}: fmt.Printf("%v:\n", k) for _, val := range value { fmt.Println(val) } case map[string]interface{}: fmt.Printf("%v:[\n", k) for key, val := range value { fmt.Printf("%v:%v\n", key, val) } fmt.Println("]") default: fmt.Printf("%v:%v\n", k, value) } }
這段代碼中,通過從map[string]interface{}中獲取value的類型,來判斷value的數據類型。這樣我們就可以為任何未知結構的JSON數據提供解析功能了。