使用一个对象或字符串数​​组的字段去解组json

时间:2014-11-09 17:41:06

标签: json go

然后你将json解组成一个结构。问题是我有一个api可能会改变从请求到请求的密钥值的类型。

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

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

但也按键指向对象,如下所示:

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

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

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

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

1 个答案:

答案 0 :(得分:3)

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

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

如果JSON包含字符串,它们将被解码为数组中的字符串。如果JSON包含对象,则它们将被解码为map[string]interface{}值。您可以使用type switch来区分这两者。像这样:

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