我有像'{"{\"hello\":\"world\"}"}'
这样的数据,它是postgresql中的数组json。
我不知道如何在golang中处理它。
我知道我可以使用string
进行定义,然后使用json.Unmarshal
来解决问题,但我想知道是否有办法在struct
答案 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"`
}