英文:
XML and JSON tags for a Golang struct?
问题
我有一个应用程序,根据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"`
}
英文:
I have an application that can output as JSON or XML depending on the HTTP request headers. I can achieve the correct output for either by adding the correct tags to the structs I'm using, but I can't figure out how to specify the tags for both JSON and XML.
For example, this serializes to correct XML:
type Foo struct {
Id int64 `xml:"id,attr"`
Version int16 `xml:"version,attr"`
}
...and this generates correct JSON:
type Foo struct {
Id int64 `json:"id"`
Version int16 `json:"version"`
}
...but this doesn't work for either:
type Foo struct {
Id int64 `xml:"id,attr",json:"id"`
Version int16 `xml:"version,attr",json:"version"`
}
答案1
得分: 75
Go标签是以空格分隔的。根据手册的说明:
按照惯例,标签字符串是可选地以空格分隔的key:"value"对的串联。每个key是一个非空字符串,由非控制字符组成,除了空格(U+0020 ' ')、引号(U+0022 '"')和冒号(U+003A ':')。每个value使用U+0022 '"'字符和Go字符串字面值语法进行引用。
所以,你想要写的是:
type Foo struct {
Id int64 `xml:"id,attr" json:"id"`
Version int16 `xml:"version,attr" json:"version"`
}
英文:
Go tags are space-separated. From the manual:
> By convention, tag strings are a concatenation of optionally space-separated key:"value" pairs. Each key is a non-empty string consisting of non-control characters other than space (U+0020 ' '), quote (U+0022 '"'), and colon (U+003A ':'). Each value is quoted using U+0022 '"' characters and Go string literal syntax.
So, what you want to write is:
type Foo struct {
Id int64 `xml:"id,attr" json:"id"`
Version int16 `xml:"version,attr" json:"version"`
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论