dp518158 2014-10-17 14:00
浏览 39
已采纳

编组时忽略JSON标签

I am getting JSON data from an external source. The field names in this JSON are not something I want to carry with me, so I am converting them to names that make sense to me using the json:"originalname" tags.

When I marshal such an object back to JSON, I naturally get the ugly (original) names again.

Is there a way to ignore tags when marshalling? Or a way to specify a different name for marshall and unmarshall?

To clarify, I have prepared an example in the playground and pasted the same code below.

Thanks in advance.

package main

import (
    "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}
}
  • 写回答

1条回答 默认 最新

  • dpgkg42484 2014-10-17 14:15
    关注

    You could implement

    type Marshaler interface {
            MarshalJSON() ([]byte, error)
    }
    

    from the standard library's encoding/json package. Example:

    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) + `}`)
    }
    

    It's admittedly not a very nice solution, though.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥35 平滑拟合曲线该如何生成
  • ¥100 c语言,请帮蒟蒻写一个题的范例作参考
  • ¥15 名为“Product”的列已属于此 DataTable
  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 自己瞎改改,结果现在又运行不了了
  • ¥15 链式存储应该如何解决
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站