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

我正在 golang 中创建一个 API,它将简单地以 json 格式显示地图中的所有数据。端点:/keys


type UserController struct{}


// NewUserController function

func NewUserController() *UserController {

    return &UserController{}

}


// Data struct

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

  }

]

我不清楚如何实现这一点。上面的代码只显示地图中的最后一个数据。这是不正确的,但我不确定如何继续。如果有人能帮我解决这个问题,那就太好了。


守着一只汪
浏览 136回答 1
1回答

慕斯王

至少有两个不同的问题。首先,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 映射——可能不是你想要的。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go