英文:
how can I defined this type data in golang
问题
我有一个像'{"{\"hello\":\"world\"}"}'
这样的数据,它是在PostgreSQL中的一个数组JSON。
我不知道如何在Golang中处理它。
我知道我可以用string
来定义,然后使用json.Unmarshal
来解决,但我想知道是否有一种方法可以将其获取到一个struct
中。
英文:
I have a data like '{"{\"hello\":\"world\"}"}'
, it's a array json in postgresql.
I don't know how to handle it in golang.
I know I can define with string
then use json.Unmarshal
to slove, but I want to know if there is a way to get it in a struct
答案1
得分: 1
我假设你发布了错误的 JSON,假设它是 '{ "hello": "world" }'
。
结构体有预定义的字段,对于任意的 JSON 数据,事先是无法知道的。可能的解决方案是将其转换为 map。
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{}
。
然后,你可以使用类型断言(type assert)来循环遍历 map 结构,直到将所有的 interface{}
类型断言为具体类型。
for k, v := range data.(map[string]interface{}) {
switch val := v.(type) {
case string:
v = val
default:
fmt.Println(k, "是未知类型")
}
}
当处理任意的输入 JSON 时,map 是一种理想的数据结构。然而,如果 JSON 是从具有预定义模式的 SQL 表生成的,你可以使用具有相同结构的结构体来替代 map。
type Hello struct {
Hello string `json:"hello"`
}
英文:
I assume you posted incorrect JSON and let's say it's '{"hello": "world"}
A struct has a predefined fields, and with arbitrary JSON coming in it's impossible to know ahead. The possible solution would be to convert it into a map.
var data interface{}
b := []byte(`{"hello": "world"}`)
err := json.Unmarshal(b, &data)
if err != nil {
panic(err)
}
fmt.Print(data)
As you print out the data, you'll probably get something like.
map[hello:world]
Which is in the form of map[string]interface{}
.
Then you can use type switch to loop into the map structure until you type assert all the interface{}
.
for k, v := range data.(map[string]interface{}) {
switch val := v.(type) {
case string:
v = val
default:
fmt.Println(k, "is unknown type")
}
}
Map is an ideal data structure when dealing with arbitrary incoming JSON. However, if the JSON is generated from an SQL table with predefined schemas, you can use a struct with the same structure instead of a map.
type Hello struct {
Hello string `json:"hello"`
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论