如何确定go中json对象的类型

时间:2017-01-21 15:24:13

标签: json go

gobyexample.com/json中,一些示例显示了如何将json字符串解码为类型化对象或字典对象,这些对象被声明为map[string]interface{}。但它假设结果始终是字典。

所以我的问题是如何确定json对象的类型以及处理该问题的最佳做法是什么?

1 个答案:

答案 0 :(得分:1)

查看json.Unmarshal的定义:

func Unmarshal(data []byte, v interface{}) error

所以至少你可以使用反射来获得基础类型。

var v interface{}
json.Unmarshal([]byte(JSON_STR), &v)
fmt.Println(reflect.TypeOf(v), reflect.ValueOf(v))

switch绝对是一种更好的做法。我想在下面的片段

switch result := v.(type) {
case map[string]interface{}:
    fmt.Println("dict:", result)
case []interface{}:
    fmt.Println("list:", result)
default:
    fmt.Println("value:", result)
}

基本上可以满足您的要求。