我需要封送成这个JSON格式:
{"messageProtocolHandshake":[{"handshakeType":"announceMax"},{"version":[{"major":1},{"minor":0}]}]}
问题与 匹配 。我的结构是handshakeType
type MessageProtocolHandshake struct {
HandshakeType HandshakeType `json:"handshakeType"`
Version []Version `json:"version"`
}
type HandshakeType struct {
HandshakeType string
}
封送处理可以使用接口切片完成:
func (h MessageProtocolHandshake) MarshalJSON() ([]byte, error) {
res := make([]interface{}, 3)
res[0] = struct {
HandshakeType string `json:"handshakeType"`
}{h.HandshakeType.HandshakeType}
res[1] = struct {
Version []Version `json:"version"`
}{h.Version}
return json.Marshal(res)
}
使用简单的封送拆/取消封送程序会从 中移除周围的大括号,因此这不起作用:handshakeType
{"messageProtocolHandshake":[{"handshakeType":"announceMax","version":[{"major":1,"minor":0}],"formats":[{"format":"JSON-UTF8"}]}]}
似乎Go在这种情况下对重新调谐的字节数组应用了一些启发式方法(未记录?
有没有更优雅的方法来省略结构外部字段名称?
--
更新总结答案:关键是要考虑不同的结构,以便在没有其他工作的情况下进行编组和取消编组,可能是使用第3个演示文稿在内部处理数据。当自定义(取消)封送处理程序发挥作用时,请记住,升级字段继承其方法,从而影响父结构。
慕的地6264312
相关分类