【问题标题】:How to set optional json in nest struct如何在嵌套结构中设置可选 json
【发布时间】:2021-12-02 21:45:47
【问题描述】:

我尝试在nest struct中设置一个可选的json配置,当我需要这个json时它会出现,否则它不会存在。

type Test struct {
  Data NestTest `json:"data"`
}

type NestTest struct {
  NestData1 string `json:"data1"`
  NestData2 string `json:"data2,omitempty"`
}

test := Test{
  Data: NestTest{
    NestData1: "something",
  },
}

b, err := json.Marshal(test)
fmt.Sprintf("the test struct json string is: %s", string(b))

output:
{"data":{"data1":"something","data2":""}}

expect:
{"data":{"data1":"something"}}

【问题讨论】:

标签: json go


【解决方案1】:

解组时所有字段都是可选的(如果结构字段在 JSON 中没有关联值,您将不会收到错误消息)。编组时,如果字段包含其类型的零值,您可以使用omitempty 不输出字段:

https://pkg.go.dev/encoding/json#Marshal

var Test struct {
  Data string `json:"data,omitempty" validate:"option"`
}

【讨论】:

  • 当我设置这个配置时,它也有一个默认值。我更新了我的问题。
  • 仔细检查,因为您的代码给出了您的预期输出,而不是您报告的输出:play.golang.org/p/0aNzJJ0D0xE
  • 分享了我的具体例子:play.golang.org/p/9MlTE_OFkcJ
  • @ccd 试试play.golang.org/p/9NEmgNAiOY0omitempty 不会为嵌套结构省略空零值。您需要使用指向所需结构的指针作为可选。
  • 是struct的指针会增加ram的压力吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-09-03
  • 1970-01-01
  • 2022-11-24
  • 1970-01-01
  • 1970-01-01
  • 2018-06-05
  • 1970-01-01
相关资源
最近更新 更多