go - 我如何在golang中声明 map 列表

标签 go

我不知道我应该如何格式化 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}]

最佳答案

按照@Volker 的建议,您应该使用 map slice :

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{} 使用了别名,以便更方便地初始化接口(interface)映射。

代码链接:https://play.golang.org/p/gu3xafnAyG

关于go - 我如何在golang中声明 map 列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47130003/

相关文章:

parsing - 如何将字符串解析为 golang 中的 url.Values?

json - go 程序中的时间总是 0

unit-testing - 在 golang 中重置 http 处理程序以进行单元测试

mysql - 当 Golang 程序在进行数据库事务时终止,它可以回滚吗?

go - 在 GOPATH 下找不到包

vue.js - 当我从浏览器输入路由时,带有 VueJS 前端的 Go-Chi 文件服务器示例后端出现错误 404 Not Found

go - 如何列出接口(interface)类型中的方法名称?

search - 如何过滤掉elasticsearch中不存在的字段?

go - 如何安装插件

interface - 将接口(interface)类型的集合传递给函数