gpt4 book ai didi

json - 所有字段的 "omitempty"

转载 作者:行者123 更新时间:2023-12-01 21:11:50 25 4
gpt4 key购买 nike

有什么方法可以强制omitempty对于结构中的所有字段 没有 针对每个字段明确指定它?

type Item struct {
Name string `json:"item,omitempty"`
Quantity int `json:"quantity,omitempty"`
Price int `json:"price,omitempty"`
}

这只是一个例子,原始结构可能有 很多领域。

指定 omitempty 看起来既丑陋又多余针对每个领域,如果我在所有领域都需要它。如果 json.Marshal() 也会很棒在 时有某种方式可以忽略空字段编码 .有人可以建议实现这一目标的最佳方法还是这是最好的方法?

最佳答案

您可以实现 json.Marshaller 接口(interface)来进行自定义 JSON 编码。

例子:

// Your struct
type Item struct {
Name string `json:"item"`
Quantity int `json:"quantity"`
Price int `json:"price"`
}

func (i Item) MarshalJSON() ([]byte, error) {
return json.Marshal(&struct {
Name string `json:"name"` // Fields that you need
}{
Name: i.Name,
})
}

然后:
i := Item{Name: "Apple", Price: 1200}
itemJSON, err := json.Marshal(i)
if err != nil {
log.Fatalf("%v", err)
}

fmt.Println(string(itemJSON)) // -> {"name":"Apple"}

您还可以找到 this article about custom marshalling有用。

此外,如果您需要结构的不同 JSON 表示 this article将非常有用

关于json - 所有字段的 "omitempty",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59680212/

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