Golang结构的XML和JSON标记?

mag*_*ter 30 xml encoding json go

我有一个应用程序可以输出为JSON或XML,具体取决于HTTP请求标头.我可以通过向我正在使用的结构添加正确的标记来实现正确的输出,但我无法弄清楚如何为JSON和XML指定标记.

例如,这序列化以纠正XML:

type Foo struct {
    Id          int64       `xml:"id,attr"`
    Version     int16       `xml:"version,attr"`
}
Run Code Online (Sandbox Code Playgroud)

...这会生成正确的JSON:

type Foo struct {
    Id          int64       `json:"id"`
    Version     int16       `json:"version"`
}
Run Code Online (Sandbox Code Playgroud)

...但这不适用于:

type Foo struct {
    Id          int64       `xml:"id,attr",json:"id"`
    Version     int16       `xml:"version,attr",json:"version"`
}
Run Code Online (Sandbox Code Playgroud)

Mar*_*rot 55

Go标签是空格分隔的.从手册:

按照惯例,标记字符串是可选的空格分隔的键:"值"对的串联.每个键都是一个非空字符串,由空格(U + 0020''),引号(U + 0022'"')和冒号(U + 003A':')以外的非控制字符组成.每个值都被引用使用U + 0022'"'字符和Go字符串文字语法.

那么,你想写的是:

type Foo struct {
    Id          int64       `xml:"id,attr" json:"id"`
    Version     int16       `xml:"version,attr" json:"version"`
}
Run Code Online (Sandbox Code Playgroud)