提问人:user2315104 提问时间:11/6/2017 更新时间:9/27/2022 访问量:24509
如何在golang中声明地图列表
How can i declare list of maps in golang
问:
我不明白我应该如何在 golang 中格式化结构,以便我可以获取 JSON 格式的映射(键/值对)列表? 到目前为止,我尝试过这个
package main
import (
"encoding/json"
"fmt"
)
func main() {
map1 := map[string]interface{}{"dn": "abc", "status": "live", "version": 2, "xyz": 3}
map2, _ := json.Marshal(map1)
fmt.Println(string(map2))
}
这里只是打印键/值对......
{“dn”:“abc”,“status”:“live”,“version”:2,“xyz”:3}
但我需要输出这样的东西:
[{“dn”:“abc”,“status”:“live”},{“version”:2,“xyz”:3}]
答:
33赞
stevenferrer
11/6/2017
#1
正如@Volker建议的那样,您应该使用地图切片:
package main
import (
"fmt"
"encoding/json"
)
// M is an alias for map[string]interface{}
type M map[string]interface{}
func main() {
var myMapSlice []M
m1 := M{"dn": "abc", "status": "live"}
m2 := M{"version": 2, "xyz": 3}
myMapSlice = append(myMapSlice, m1, m2)
// or you could use `json.Marshal(myMapSlice)` if you want
myJson, _ := json.MarshalIndent(myMapSlice, "", " ")
fmt.Println(string(myJson))
}
输出:
[
{
"dn": "abc",
"status": "live"
},
{
"version": 2,
"xyz": 3
}
]
在代码中,我使用了别名,以便更方便地初始化接口映射。map[string]interface{}
代码链接:https://play.golang.org/p/gu3xafnAyG
评论
0赞
user2315104
11/6/2017
棒。。明白了
9赞
Cerise Limón
11/6/2017
以下是如何在没有额外类型的情况下做到这一点: ' myMapSlice := []map[string]interface{}{{“dn”: “abc”, “status”: “live”},{“version”: 2, “xyz”: 3}}' 游乐场示例。
2赞
Kevin Wang
9/27/2022
#2
我有同样的问题,并回答了自己(我的情况没有用处)struct
package main
import "fmt"
func main() {
mapSlice := []map[string]interface{}{}
map1 := map[string]interface{}{"foo": "bar"}
mapSlice = append(mapSlice, map1)
fmt.Println(mapSlice[0]["foo"]) // prints "bar"
}
评论