gpt4 book ai didi

json - 如何在 Go json marshal 中显示空对象而不是空结构或 nil

转载 作者:IT王子 更新时间:2023-10-29 00:43:22 24 4
gpt4 key购买 nike

在为结构指针执行 json.Marshal() 时,我需要显示 json 的空对象 {}。我只能输出 null 值或空结构值。

如果 person 键用 &Person{}new(Person) 填充,它将显示如下所示的空结构:

{
"data": {
"person": {
"name": "",
"age": 0
},
"created_date": "2009-11-10T23:00:00Z"
}
}

如果我们根本不初始化它,它将显示 null

{
"data": {
"person": null,
"created_date": "2009-11-10T23:00:00Z"
}
}

我想显示 "person": {}。可能吗?

完整代码去 Playground :https://play.golang.org/p/tT15G2ESPVc

最佳答案

选项 A,在所有 Person 的字段上使用 omitempty 标记选项,并确保在编码之前分配响应的字段.

type Person struct {
Name string `json:"name,omitempty"`
Age int `json:"age,omitempty"`
}

// ...

resp.Person = new(Person)

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"`
}

https://play.golang.org/p/EKQc7uf1_Vk


选项C,让Reponse类型实现json.Marshaler接口(interface)。

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)
}

https://play.golang.org/p/1qkSCWZ225j


可能还有其他选择...

关于json - 如何在 Go json marshal 中显示空对象而不是空结构或 nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50136579/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com