【问题标题】:How can i declare list of maps in golang我如何在golang中声明地图列表
【发布时间】:2018-04-18 04:57:03
【问题描述】:

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

【问题讨论】:

  • 使用一张地图。
  • 所以如果我理解正确的话,你需要一个 JSON 数组吗?
  • 是的。谢谢 。如果可以的话,请给我贴一些示例代码..我可以继续前进
  • 我投票决定将此问题作为题外话结束,因为 SO 不是我网站的编写代码。
  • @user2315104,看看gobyexample.com/json,我不确定你是否有特定的 JSON 结构。

标签: go


【解决方案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

【讨论】:

  • 太棒了..明白了
  • 以下是不使用额外类型的方法:` myMapSlice := []map[string]interface{}{{"dn": "abc", "status": "live"}, {“版本”:2,“xyz”:3}}`playground example.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-14
  • 1970-01-01
  • 1970-01-01
  • 2013-08-22
  • 2013-05-28
相关资源
最近更新 更多