我想省略嵌套在 JSON 请求中的某些结构。我在 golang 上创建了一个 rest API,它从 http 请求中读取消息正文,将其解码为代码中定义的结构并将其插入 Mongo DB
我的结构如下。请注意,对于嵌套结构C,我使用了一个指针以便能够省略它。
type A struct {
Title string `json:"title"`
Text string `json:"text"`
Data B `json:"data"`
}
type B struct {
Product *C `json:"product,omitempty"`
ExternalLink string `json:"external_link,omitempty"`
}
type C struct {
Name string `json:"name"`
Id int `json:"id"`
}
这是我解码它的方式(没有去 Json.Unmarshall 因为我读到对于 http 主体,解码应该在unmarshall上使用)
func NewMessage(req *http.Request) *A {
var newMessage *A
json.NewDecoder(req.Body).Decode(&newMessage)
messageInData := newMessage
return newMessage
}
返回时的“newMessage”直接插入到 Mongo 中。但是,即使请求有效负载不包含诸如结构 C 之类的对象,如下所示
{
"title": "First message from GoLang",
"text": "Hello Dastgyr",
"data": {
"external_link": "some link here"
//no product object (C struct) here
}
}
插入到 Mongo 中的对象仍然包含具有空值的结构 C,如下所示
{
"title": "First message from GoLang",
"text": "Hello Dastgyr",
"data": {
"product": null,
"external_link": "some link here"
}
}
我也尝试过在 Struct A 中使用 B 作为指针,但无济于事
type A struct {
Title string `json:"title"`
Text string `json:"text"`
Data *B `json:"data,omitempty"`
}
我希望能够省略某些嵌套结构。尽管使用了指针,但我想要的结构仍然没有遗漏。我在定义结构时犯了什么错误?
对 golang 还是新手,所以向正确的方向推动会有所帮助
手掌心
相关分类