tam*_*ama 4 json marshalling go
我需要显示JSON的空对象{}时,做json.Marshal()了一个结构指针。我只能输出nullvalue或空的struct值。
如果person键用&Person{}或填充new(Person),它将显示空结构,如下所示:
{
"data": {
"person": {
"name": "",
"age": 0
},
"created_date": "2009-11-10T23:00:00Z"
}
}
Run Code Online (Sandbox Code Playgroud)
如果我们根本不初始化它,它将显示null。
{
"data": {
"person": null,
"created_date": "2009-11-10T23:00:00Z"
}
}
Run Code Online (Sandbox Code Playgroud)
我想展示"person": {}。可能吗?
前往Playground获取完整代码:https://play.golang.org/p/tT15G2ESPVc
选项A,omitempty在所有Person的字段上使用标签选项,并确保在封送处理之前已分配响应的字段。
type Person struct {
Name string `json:"name,omitempty"`
Age int `json:"age,omitempty"`
}
// ...
resp.Person = new(Person)
Run Code Online (Sandbox Code Playgroud)
https://play.golang.org/p/o3jWdru_8bC
选项B,使用嵌入指针类型的非指针包装器Person类型。
type PersonJSON struct {
*Person
}
type Response struct {
Person PersonJSON `json:"person"`
CreatedDate time.Time `json:"created_date"`
}
Run Code Online (Sandbox Code Playgroud)
https://play.golang.org/p/EKQc7uf1_Vk
选项C,具有Reponse类型实现json.Marshaler接口。
func (r *Response) MarshalJSON() ([]byte, error) {
type tmp Response
resp := (*tmp)(r)
var data struct {
Wrapper struct {
*Person
} `json:"person"`
*tmp
}
data.Wrapper.Person = resp.Person
data.tmp = resp
return json.Marshal(data)
}
Run Code Online (Sandbox Code Playgroud)
https://play.golang.org/p/1qkSCWZ225j
可能还有其他选择...
| 归档时间: |
|
| 查看次数: |
648 次 |
| 最近记录: |