小编典典

使用字段(由对象或字符串组成的数组)解组json

go

在执行过程中,您将json解组为结构。问题是我有一个api,可能会在请求之间更改键值的类型。

例如,可能是内联对象的对象如下:

{
  "mykey": [
    {obj1}, 
    {obj2}
  ]
}

而且还可以通过键指向对象,如下所示:

{
  "mykey": [
    "/obj1/is/at/this/path", 
    "/obj2/is/at/this/other/path"
  ]
}

可以内联某些对象,但是可以从多个位置引用其他对象。

在javascript或python中这不是问题。只需检查类型。

解组和解析这两个对象的惯用方式是什么?是反映的唯一方法吗?


阅读 321

收藏
2020-07-02

共1个答案

小编典典

您可以将此JSON解组为如下结构:

type Data struct {
    MyKey []interface{} `json:"mykey"`
}

如果JSON包含字符串,则将它们解码为数组中的字符串。如果JSON包含对象,它们将被解码为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)
    }
}
您可以在此处尝试使用此示例:http
//play.golang.org/p/PzwFI2FSav
2020-07-02