我正在使用Go和GoRestful将RESTFUL前端编程到存储在Google App Engine数据存储区中的某些实体。
数据转换为JSON / XML,并通过控制每种格式样式的标签呈现给用户。我怎样才能将标签应用于结构本身的名称,以便使用正确的样式输出?
我的结构的一个例子是:
type Shallow struct {
Key string `datastore:"-" json:"key" xml:"key"`
LastModified time.Time `json:"last_modified" xml:"last-modified"`
Version int `json:"version" xml:"version"`
Status int `json:"status" xml:"status"`
Link Link `datastore:"-" json:"link" xml:"link"`
Name string `json:"name" xml:"name"`
}
type ProbabilityEntry struct {
ItemId int64 `datastore:"ItemId" json:"item_id" xml:"item-id"`
Probability float32 `datastore:"Probability" json:"probability" xml:"probability"`
Quantity int16 `datastore:"Quantity" json:"quantity" xml:"quantity"`
}
type LootTable struct {
Shallow
AllowPreload bool `json:"allow_preload" xml:"allow-preload"`
Probabilities []ProbabilityEntry `json:"probabilities" xml:"probabilities"`
}
当LootTable结构发送到JSON / XML时,它应该将自己表示为“loot_table”或“loot-table”而不是“LootTable”。
答案 0 :(得分:4)
简单回答:
将其包裹在外部结构中:
type Payload struct {
Loot LootTable `json:"loot_table"`
}
更长的答案:
如果JSON的接收者知道他们得到了什么,那么这不是必需的。但是,在构建JSON API时,我经常创建一个Response结构,其中包含有关请求的额外详细信息,其中可能包括响应的类型。这是一个例子:
type JSONResponse struct {
Obj interface{} `json:"obj"` // Marshall'ed JSON (not wrapped)
Type string `json:"type"` // "loot_table" for example
Ok bool `json:"ok"` // Does this response require error handling?
Errors []string `json:"errors"` // Any errors, you could leave out Ok and just check this
}
同样,通过API调用,您通常会知道您期望的是什么,但如果响应可以是多种类型之一,则此方法可以提供帮助。