Go map[int]struct JSON Marshal

huangapple go评论82阅读模式
英文:

Go map[int]struct JSON Marshal

问题

尝试将map[int]解析为用户定义的结构体(struct)在Go语言中:

以下是数据模式:

type Recommendation struct {
    Book  int     `json:"book"`
    Score float64 `json:"score"`
}

以下是JSON编组(marshaling)的代码:

ureco := make(map[int]data.Recommendation)
ureco, _ = reco.UserRunner()

json, _ := json.Marshal(ureco)
fmt.Println(json)

其中reco.UserRunner()返回适当的结构体类型。

这将打印一个空的JSON对象:

[]

更新:

错误信息:

json: unsupported type: map[int]data.Recommendation

那么如何将结构体的map转换为JSON?或者是否有其他方法可以实现?

英文:

Trying to parse a map[int] to user defined struct in go:

Here are the data schemas.

type Recommendation struct {
    Book  int     `json:"book"`
    Score float64 `json:"score"`
}

Here is the json marshaling:

ureco := make(map[int]data.Recommendation)
ureco, _ = reco.UserRunner()

json, _ := json.Marshal(ureco)
fmt.Println(json)

Where reco.UserRunner() returns the appropriate struct type.

This prints an empty json object:

[]

UPDATE:

error message:

json: unsupported type: map[int]data.Recommendation

So how do I json a map of structs? or is there an alternative approach?

答案1

得分: 5

如果你只需要编组它,你可以遍历你的映射并将其转换为切片。

slc := make([]data.Recommendation, 0)
for _, val := range ureco {
    slc = append(slc, val)
}
json, _ := json.Marshal(slc)

你可以在这里看到一个使用 map[int]string 的简单示例:http://play.golang.org/

英文:

If you just need to marshal it, you could just iterate over your map and turn it into a slice.

slc := make([]data.Recommendation)
for _, val := range ureco {		
    slc = append(out, val)
}
json, _ := json.Marshal(slc)

You can see a simple example with a map[int]string here: http://play.golang.org/

huangapple
  • 本文由 发表于 2014年4月5日 06:24:09
  • 转载请务必保留本文链接:https://go.coder-hub.com/22874022.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定