带有导出和未导出字段的 Golang Marshal/Unmarshal JSON

我已经看到了很多方法来编组/解组只有未导出字段的结构。但是我怎么能用混合字段来做到这一点呢?


给定一个结构:


type Test struct {

    fieldA string `json:"fieldA"`

    FieldB int    `json:"fieldB"`

    FieldC string `json:"fieldC"`

}

如何编写 MarshalJSON/UnmarshalJSON 函数,以便 fieldA 与 FieldB 和 FieldC 一起传输?


以下编译,但当我运行它时会溢出调用堆栈。我的猜测是我正在递归编组对象,但我不确定在编码时如何保留导出和未导出的字段。


func (t *Test) MarshalJSON() ([]byte, error) {

    return json.Marshal(struct {

         *Test

         FieldA string `json:"fieldA"`

    }{

         t,

         t.fieldA,

    })

}


func (t *Test) UnmarshalJSON(b []byte) error {

    return json.Unmarshal(b, &t)

}

有没有办法做到这一点?或者我应该重新考虑我的数据结构,也许只是导出该字段?


注意:我知道我可以手动完成每个字段,但如果可能的话,我想避免这种情况,以使更新代码更易于管理。


慕尼黑8549860
浏览 150回答 2
2回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go