如何解决Go JSON Unmarshalling:忽略空字段
说我有这个代码:
type TestStruct struct {
A *string `json:"a"`
B *string `json:"b"`
}
var jsonStr string = `
{
"a": "a-string","b": null
}
`
aval := "a-default"
bval := "b-default"
foo := TestStruct{
A: &aval,B: &bval,}
if err := json.Unmarshal([]byte(jsonStr),&foo); err != nil {
panic(err)
}
fmt.Println(foo.A)
fmt.Println(foo.B)
这将打印出来:
0x{A} 的地址
无
即JSON 中的“空”值将覆盖解组之前结构中已经存在的值。 Go 中是否有任何方法可以防止这种情况发生,并让解码器忽略任何空的 JSON 字段?
我试图找到某种方法来使结构具有具有默认值(解组之前结构中的值)的指针字段,并且不能用空值覆盖。具体来说,我需要它是一个作为指针的字段,并且可以具有默认的预解组值或来自 JSON 的有效值,但绝不是 nil
。
解决方法
也许你可以在 json 标签的第一个定义 omitempty 像这样
package main
import (
"encoding/json"
"fmt"
)
type TestStruct struct {
A *string `json:"a"`
B *string `json:"omitempty,b"`
}
func main() {
var jsonStr string = `
{
"a": "a-string","b": null
}
`
aval := "a-default"
bval := "b-devault"
foo := TestStruct{
A: &aval,B: &bval,}
if err := json.Unmarshal([]byte(jsonStr),&foo); err != nil {
panic(err)
}
fmt.Println(foo.A)
fmt.Println(*foo.B)
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。