我正在尝试将地图输出为XML数据,但是收到以下错误:
xml: unsupported type: map[string]int
编组映射适用于JSON,因此我不明白为什么它不适用于XML。使用Struct真的是唯一的方法吗?
我最终按照DaveC的建议使用xml.Marshaler解决了这个问题
// StringMap is a map[string]string. type StringMap map[string]string // StringMap marshals into XML. func (s StringMap) MarshalXML(e *xml.Encoder, start xml.StartElement) error { tokens := []xml.Token{start} for key, value := range s { t := xml.StartElement{Name: xml.Name{"", key}} tokens = append(tokens, t, xml.CharData(value), xml.EndElement{t.Name}) } tokens = append(tokens, xml.EndElement{start.Name}) for _, t := range tokens { err := e.EncodeToken(t) if err != nil { return err } } // flush to ensure tokens are written return e.Flush() }
资料来源:https : //gist.github.com/jackspirou/4477e37d1f1c043806e0
现在,只需调用即可将地图编组
output, err := xml.MarshalIndent(data, "", " ")