为了账号安全,请及时绑定邮箱和手机立即绑定

如何以 json 格式显示地图中的所有数据 - Golang?

如何以 json 格式显示地图中的所有数据 - Golang?

Go
守着一只汪 2021-11-22 18:40:16
我正在 golang 中创建一个 API,它将简单地以 json 格式显示地图中的所有数据。端点:/keystype UserController struct{}// NewUserController functionfunc NewUserController() *UserController {    return &UserController{}}// Data structtype Data struct {    Datakey   int    `json:"key"`    Datavalue string `json:"value"`}var datamap = make(map[int]string)func (uc UserController) getallkeys(w http.ResponseWriter, r *http.Request, p httprouter.Params) {    type Users []Data    var uj Users    for k, v := range datamap {        uj = Users{            Data{                Datakey:   k,                Datavalue: v,            },        }    }    result, _ := json.Marshal(uj)    w.Header().Set("Content-Type", "application/json")    w.WriteHeader(200)    fmt.Fprintf(w, "%s", result)}例如:响应应该是这样的[  {    "key":somekey,    "value":"somevalue"  },  {    "key":somekey,    "value":"somevalue"  }]我不清楚如何实现这一点。上面的代码只显示地图中的最后一个数据。这是不正确的,但我不确定如何继续。如果有人能帮我解决这个问题,那就太好了。
查看完整描述

1 回答

?
慕斯王

TA贡献1864条经验 获得超2个赞

至少有两个不同的问题。


首先,JSON Map 不能有 `int' 键。这是 JSON 规范的一部分。要么将其更改为字符串,要么您必须为地图实现 MarshalJSON 和 UnmarshalJSON 接口,即类型


    type MyMap map[int]string

谷歌golang UnmarshalJSON time.Duration搜索了一些基本的例子。此外,针对地图和您的特定密钥类型。


二、对于切片类型


    type Users []Data

添加元素需要追加


    uj := make(Users,0)

    for k, v := range datamap {

        d := Data{k,v}

        uj = append(uj, d) 

    }

当然,编组一个切片会产生一个无键 JSON 映射——可能不是你想要的。


查看完整回答
反对 回复 2021-11-22
  • 1 回答
  • 0 关注
  • 135 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信