试图找到一个简单的解决方案来编组/解组到以下结构中
type Resource struct {
Data []ResourceData `json:"data"`
}
type ResourceData struct {
Id string `json:"id"`
Type string `json:"type"`
Attributes map[string]interface{} `json:"attributes"`
Relationships map[string]Resource `json:"relationships"`
}
r := Resource{}
json.Unmarshal(body, &r)
如果:
body = `{"data":[{"id":"1","type":"blah"}]}`
但是我也需要它来回应:
body = `{"data":{"id":"1","type":"blah"}}` //notice no slice
我可以做一个单独的类型
type ResourceSingle struct {
Data ResourceData `json:"data"`
}
但是,这意味着需要复制我附加到资源的所有功能,这是可能的。但是,我需要在执行之前找出要解组的类型,而且当涉及到关系部分时,每个类型都可能包含数据:[]{} 或数据{},所以这个想法不会工作。
或者我可以使用
map[string]*json.RawMessage
//or
type Resource struct {
Data *json.RawMessage `json:"data"`
}
但是,当以 json 形式存在时,我怎么知道它是一个切片还是一个节点来提供正确的结构以进行解组?
我的最后一招是将 umarshal 转换为 map[string] 接口并使用大量反射测试..但这很冗长。
想法?
白衣染霜花
相关分类