在执行过程中,您将json解组为结构。问题是我有一个api,可能会在请求之间更改键值的类型。
例如,可能是内联对象的对象如下:
{ "mykey": [ {obj1}, {obj2} ] }
而且还可以通过键指向对象,如下所示:
{ "mykey": [ "/obj1/is/at/this/path", "/obj2/is/at/this/other/path" ] }
可以内联某些对象,但是可以从多个位置引用其他对象。
在javascript或python中这不是问题。只需检查类型。
解组和解析这两个对象的惯用方式是什么?是反映的唯一方法吗?
您可以将此JSON解组为如下结构:
type Data struct { MyKey []interface{} `json:"mykey"` }
如果JSON包含字符串,则将它们解码为数组中的字符串。如果JSON包含对象,它们将被解码为map[string]interface{}值。您可以使用类型开关来区分两者。像这样:
map[string]interface{}
for i, v := range data.MyKey { switch x := v.(type) { case string: fmt.Println("Got a string: ", x) case map[string]interface{}: fmt.Printf("Got an object: %#v\n", x) } }