如何在golang中声明地图列表

How can i declare list of maps in golang

提问人:user2315104 提问时间:11/6/2017 更新时间:9/27/2022 访问量:24509

问:

我不明白我应该如何在 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}]

评论

1赞 Volker 11/6/2017
使用地图切片。
0赞 stevenferrer 11/6/2017
所以如果我理解正确的话,你需要一个 JSON 数组?
0赞 user2315104 11/6/2017
是的。谢谢。如果可以,请向我粘贴一些示例代码..我可以继续前进
0赞 stevenferrer 11/6/2017
@user2315104,gobyexample.com/json 检查一下,我不确定您是否有特定的 JSON 结构。
0赞 user2315104 11/6/2017
谢谢。我尝试过这个,但不知道如何定义映射列表,然后在该结构中推送值,以便在编码后我可以获得json

答:

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"
}

https://go.dev/play/p/BOCVAOngul2