gpt4 book ai didi

json - 将 int 设置为 0 的 Unmarshal/Marshal json 似乎不起作用

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

我正在尝试将 json 对象解析为 struct,但是 integer 值设置为 0 将不起作用。

q := []byte(`{"string":"this is a string", "integer": 0}`)

type Test struct {
String string `json:"string,omitempty"`
Integer int `json:"integer,omitempty"`
}

var qq Test
if err := json.Unmarshal(q, &qq); err != nil {
panic(err)
}

queryStr, err := json.Marshal(qq)
if err != nil {
panic(err)
}
fmt.Println(string(queryStr))
// Output: {"string": "this is a string"}

如果我将整数设置为除 0 以外的任何值,则可以正常工作。

即使我对对象进行解码并将整数字段设置为 0,将其重新编码也会删除“整数”字段。

为什么?以及如何解决这个问题?

编辑:

根据我从评论中收集到的信息,omitempty 在值为 0 时触发。所以现在消失是有道理的。

我正在解析 json,对其进行编辑并将其转发到另一个服务,所以这很不幸,尤其是当字段不存在默认为 0 以外的其他值时,我宁愿不必为下游 API 提供默认值.

那么有没有办法省略空值而保留0呢?

或者将 empty 更改为其他内容?

我是否需要 2 个结构:一个用于输入,一个用于输出?

最佳答案

对字段使用指针,以便区分JSON类型的零值和缺失值。

type Test struct {
String *string `json:"string,omitempty"`
Integer *int `json:"integer,omitempty"`
}

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

关于json - 将 int 设置为 0 的 Unmarshal/Marshal json 似乎不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38486564/

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