Go官方博客上有一篇不错的文章
encoding/json:JSON和GO。可以将“任意数据解码”到接口{}中,并使用类型断言来动态确定类型。
您的代码可能可以修改为:
package mainimport ( "encoding/json" "fmt")var my_json string = `{ "an_array":[ "with_a string", { "and":"some_more", "different":["nested", "types"] } ]}`func WTHisThisJSON(f interface{}) { switch vf := f.(type) { case map[string]interface{}: fmt.Println("is a map:") for k, v := range vf { switch vv := v.(type) { case string: fmt.Printf("%v: is string - %qn", k, vv) case int: fmt.Printf("%v: is int - %qn", k, vv) default: fmt.Printf("%v: ", k) WTHisThisJSON(v) } } case []interface{}: fmt.Println("is an array:") for k, v := range vf { switch vv := v.(type) { case string: fmt.Printf("%v: is string - %qn", k, vv) case int: fmt.Printf("%v: is int - %qn", k, vv) default: fmt.Printf("%v: ", k) WTHisThisJSON(v) } } }}func main() { fmt.Println("JSON:n", my_json, "n") var f interface{} err := json.Unmarshal([]byte(my_json), &f) if err != nil { fmt.Println(err) } else { fmt.Printf("JSON: ") WTHisThisJSON(f) }}它给出的输出如下:
JSON: { "an_array":[ "with_a string", { "and":"some_more", "different":["nested", "types"] } ]}JSON: is a map:an_array: is an array:0: is string - "with_a string"1: is a map:and: is string - "some_more"different: is an array:0: is string - "nested"1: is string - "types"尚未完成,但显示了它如何工作。



