我试图将json对象解析为结构,但设置为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"}
Run Code Online (Sandbox Code Playgroud)
如果我将整数设置为0以外的任何值,这可以正常工作.
即使我解组对象并将Integer字段设置为0,将其编组回去也会删除"整数"字段.
为什么?以及如何解决这个问题?
编辑:
从我从评论中收集的内容,omitempty当值为0时触发.所以现在消失是有道理的.
我正在解析json,编辑它并将其转发到另一个服务,所以这是不幸的,特别是因为字段不存在默认为0以外的其他值,我宁愿不必为下游API提供默认值.
那么有没有办法省略空值但是保持0?
或者换成其他的东西?
我需要有2个结构:一个用于输入,一个用于输出?
Jim*_*imB 16
使用字段的指针,以便可以将JSON类型的零值与缺失值区分开来.
type Test struct {
String *string `json:"string,omitempty"`
Integer *int `json:"integer,omitempty"`
}
Run Code Online (Sandbox Code Playgroud)
https://play.golang.org/p/yvYSHxubLy
小智 7
“ omitempty”标记仅适用于从struct到JSON的封送处理。它会跳过空值,因此它们不会出现在JSON中。它不会以任何方式影响拆封。如果要检测是否在JSON中指定了该字段,请使用指针。如果未指定该字段,则指针值为nil。
| 归档时间: |
|
| 查看次数: |
12605 次 |
| 最近记录: |