我怎样才能在golang中定义这种类型的数据

时间:2016-03-16 16:51:36

标签: arrays json go

我有像'{"{\"hello\":\"world\"}"}'这样的数据,它是postgresql中的数组json。

我不知道如何在golang中处理它。 我知道我可以使用string进行定义,然后使用json.Unmarshal来解决问题,但我想知道是否有办法在struct

中找到它

1 个答案:

答案 0 :(得分:0)

我假设你发布了错误的JSON,让我们说它是'{"hello": "world"} 一个struct有一个预定义的字段,并且任意JSON进入它是不可能提前知道的。可能的解决方案是将其转换为地图。

var data interface{}
b := []byte(`{"hello": "world"}`)
err := json.Unmarshal(b, &data)
if err != nil {
        panic(err)
}
fmt.Print(data)

当你打印出数据时,你可能会得到类似的东西。 map[hello:world]

其中map[string]interface{}的形式。

然后您可以使用类型开关循环到地图结构中,直到您键入断言所有interface{}

for k, v := range data.(map[string]interface{}) {
        switch val := v.(type) {
        case string:
                v = val
        default:
                fmt.Println(k, "is unknown type")
        }
}

在处理任意传入的JSON时,Map是一种理想的数据结构。但是,如果从具有预定义模式的SQL表生成JSON,则可以使用具有相同结构的结构而不是映射。

type Hello struct {
        Hello string `json:"hello"`
}