我正在 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 映射——可能不是你想要的。
- 1 回答
- 0 关注
- 135 浏览
添加回答
举报
0/150
提交
取消