34

我有一个可以根据 HTTP 请求标头输出为 JSON 或 XML 的应用程序。我可以通过将正确的标签添加到我正在使用的结构中来实现正确的输出,但我不知道如何为 JSON 和 XML 指定标签。

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

type Foo struct {
    Id          int64       `xml:"id,attr"`
    Version     int16       `xml:"version,attr"`
}

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

type Foo struct {
    Id          int64       `json:"id"`
    Version     int16       `json:"version"`
}

...但这对任何一个都不起作用:

type Foo struct {
    Id          int64       `xml:"id,attr",json:"id"`
    Version     int16       `xml:"version,attr",json:"version"`
}
4

1 回答 1

66

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"`
}
于 2013-11-10T01:34:26.507 回答