gpt4 book ai didi

json - Golang json.Marshal() 忽略 ByteArray 字段中的 omitempty

转载 作者:IT王子 更新时间:2023-10-29 01:33:25 33 4
gpt4 key购买 nike

请看下面。

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

我的期望值是:

{"Byte2":0,"Name":"bob"}

但实际:

{"ByteArray":[0,0,0,0],"Byte2":0,"Name":"bob"}

根据文档(https://golang.org/pkg/encoding/json/)

The empty values are false, 0, any nil pointer or interface value, and any array, slice, map, or string of length zero.

因此,json.Marshall() 会忽略 omitempty-tag,因为 [0 0 0 0] 既不是零长度也不是 0 也不是 nil。

现在,要获得预期值,我们应该怎么做?

最佳答案

几个选项:

  1. 使 A 成为具有自己的 MarshalJSON 方法的类型的实例,并在那里实现您想要的行为(例如,不包括 ByteArray 如果它的所有值都为零)。

  2. 改变ByteArray的类型。 []byte 可以工作,因为它默认为空 slice ,而 *[4]byte 可以工作,因为它默认为 nil。包含指针是处理仅有时出现在序列化中的字段的常用方法。当然,这确实需要更多的空间、更多的间接性和更多的 GC 工作。

关于json - Golang json.Marshal() 忽略 ByteArray 字段中的 omitempty,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34024992/

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