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

编组时忽略 JSON 标签

编组时忽略 JSON 标签

Go
紫衣仙女 2021-08-23 16:40:36
我正在从外部来源获取 JSON 数据。这个 JSON 中的字段名称不是我想随身携带的东西,所以我使用json:"originalname"标签将它们转换为对我有意义的名称。当我将这样的对象编组回 JSON 时,我自然会再次获得丑陋的(原始)名称。有没有办法在编组时忽略标签?或者为 marshall 和 unmarshall 指定不同名称的方法?为了澄清起见,我在操场上准备了一个示例,并在下面粘贴了相同的代码。提前致谢。package mainimport (    "encoding/json"    "fmt")type Band struct {    Name   string `json:"bandname"`    Albums int    `json:"albumcount"`}func main() {    // JSON -> Object    data := []byte(`{"bandname": "AC/DC","albumcount": 10}`)    band := &Band{}    json.Unmarshal(data, band)    // Object -> JSON    str, _ := json.Marshal(band)    fmt.Println("Actual Result: ", string(str))    fmt.Println("Desired Result:", `{"Name": "AC/DC","Albums": 10}`)    // Output:    // Actual Result:  {"bandname":"AC/DC","albumcount":10}    // Desired Result: {"Name": "AC/DC","Albums": 10}}
查看完整描述

2 回答

?
富国沪深

TA贡献1790条经验 获得超9个赞

你可以实施


type Marshaler interface {

        MarshalJSON() ([]byte, error)

}

来自标准库的encoding/json包。示例:


type Band struct {

    Name   string `json:"bandname"`

    Albums int    `json:"albumcount"`

}


func (b Band) MarshalJSON() ([]byte, error) {

    n, _ := json.Marshal(b.Name)

    a, _ := json.Marshal(b.Albums)

    return []byte(`{"Name":` + string(n) + `,"Albums":` + string(a) + `}`)

}

诚然,这不是一个很好的解决方案。


查看完整回答
反对 回复 2021-08-23
  • 2 回答
  • 0 关注
  • 182 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号