这是我的结构:
type Resource struct {
Name string `json:"name"`
Ranges struct {
Range []struct {
Begin int `json:"begin"`
End int `json:"end"`
} `json:"range"`
} `json:"ranges,omitempty"`
Role string `json:"role,omitempty"`
Type string `json:"type"`
Scalar Scalar `json:"scalar,omitempty"`
}
我不知道如何在JSON中制作字段而不是null
。例如,struct Range就是这样的:
{
"name": "cpus",
"ranges": {
"range": null
},
"type": "SCALAR",
"scalar": {
"value": 1
}
}, {
"name": "mem",
"ranges": {
"range": null
}
一种方法是将范围分配为*string
然后你应该将它与nil进行比较,如果不是nil将其转换为字符串并再次编组它
那改变struct解决了我的问题:
type Resource struct {
Name string `json:"name"`
Ranges *Ranges `json:"ranges,omitempty"`
Role string `json:"role,omitempty"`
Type string `json:"type"`
Scalar *Scalar `json:"scalar,omitempty"`
}
假设您要编组问题中的结构并获得如下所示的json输出:
{
"name": "cpus",
"ranges": {
"range": []
},
"type": "SCALAR",
"scalar": {
"value": 1
}
},
{
"name": "mem",
"ranges": {
"range": []
}
}
在golang切片中,[]
是一个引用类型,由数组支持。你可以在这里阅读切片的内部:https://blog.golang.org/go-slices-usage-and-internals
基本上你在输出中获得null
的原因是因为你没有实例化切片,切片本质上是一个指针,而且指针是nil。
创建一个新的空切片,如[]Range{}
,并将其分配给当前在json中的null
的Resource中的字段,而不是nil指针,您将有一个空切片,将被编组为[]
而不是null
。