为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
红颜莎娜 2022-08-09 20:11:20
我需要封送成这个JSON格式:{"messageProtocolHandshake":[{"handshakeType":"announceMax"},{"version":[{"major":1},{"minor":0}]}]}问题与 匹配 。我的结构是handshakeTypetype 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个演示文稿在内部处理数据。当自定义(取消)封送处理程序发挥作用时,请记住,升级字段继承其方法,从而影响父结构。
查看完整描述

1 回答

?
慕的地6264312

TA贡献1817条经验 获得超6个赞

您指定的 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


查看完整回答
反对 回复 2022-08-09
  • 1 回答
  • 0 关注
  • 121 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信