json.Marshal 映射到 JSON 数组

当我尝试 Marshal 地图时, json.Marshal 返回:

{"Map Key":"Map Value"}...

这是正常行为。但我可以将其编组为:

{"Map":[{"Name":"Map Key","Date":"Map Value"},{"Name":"Map Key2","Date":"Map Value2"}]}


斯蒂芬大帝
浏览 211回答 1
1回答

蝴蝶不菲

您可以定义一个自定义json.Marshaler接口来执行此操作,例如:type mapInfo struct {    Name string `json:"name"`    Date string `json:"date"`}type CustomMap map[string]stringfunc (cm CustomMap) MarshalJSON() ([]byte, error) {    // if you want to optimize you can use a bytes.Buffer and write the strings out yourself.    var out struct {        Map []mapInfo `json:"map"`    }    for k, v := range cm {        out.Map = append(out.Map, mapInfo{k, v})    }    return json.Marshal(out)}func (cm CustomMap) UnmarshalJSON(b []byte) (err error) {    var out struct {        Map []mapInfo `json:"map"`    }    if err = json.Unmarshal(b, &out); err != nil {        return    }    for _, v := range out.Map {        cm[v.Name] = v.Date    }    return}playground
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go