将结构字段封送为 JSON,但不带字段名称

我需要封送成这个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个演示文稿在内部处理数据。当自定义(取消)封送处理程序发挥作用时,请记住,升级字段继承其方法,从而影响父结构。


红颜莎娜
浏览 122回答 1
1回答

慕的地6264312

您指定的 JSON 具有与结构不同的模型。有几种方法可以对齐这些:更改 JSON 数据的规范以匹配您的结构,更改结构以匹配 JSON 的规范,或创建仅用于封送处理的新结构。我省略了最后一个示例,因为它与第二种方法非常相似。更改 JSON 的规范以下模型保持不变:type MessageProtocolHandshake struct {    HandshakeType HandshakeType `json:"handshakeType"`    Version       []Version     `json:"version"`}type HandshakeType struct {    HandshakeType string}此操作的 JSON 为:{"handshakeType":{"HandshakeType":""},"version":[]}您没有指定类型,因此我不知道如何更改JSON。Version更改结构以下 JSON 保持不变:{"messageProtocolHandshake":[{"handshakeType":"announceMax"},{"version":[{"major":1},{"minor":0}]}]}其结构是:type Model struct {    MessageProtocolHandshake []interface{} `json:"messageProtocolHandshake"`}type HandshakeType struct {    HandshakeType string `json:"handshakeType"`}type Versions struct {    Version []Version `json:"version"`}type Version struct {    Major *int `json:"major,omitempty"`    Minor *int `json:"minor,omitempty"`}取消婚姻不会是微不足道的。https://play.golang.org/p/89WUhcMFM0B从结果中可以明显看出,您使用的模型并不好。如果有办法改变所有这些,我建议从头开始,使用必要的数据并从结构中创建JSON规范。我建议阅读JSON:https://www.json.org/json-en.html另外,我推荐Go和JSON的介绍:https://blog.golang.org/json
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go