在 Go 解组中识别 Void 和未指定值
将 JSON 数据解组到 Go 结构体时,很难区分空值和缺失值价值观。当您希望在程序中以不同方式处理这些值时,这一点尤其重要。
请考虑以下示例:
import ( "encoding/json" "fmt" ) type Category struct { Name string Description string } var categories []Category jsonBlob := []byte(`[ {"Name": "A", "Description": "Monotremata"}, {"Name": "B"}, {"Name": "C", "Description": ""} ]`) err := json.Unmarshal(jsonBlob, &categories) if err != nil { fmt.Println("error:", err) } fmt.Printf("%+v", categories)
在此示例中,类别 B 的描述字段为空,而JSON 中未指定类别 C 的“描述”字段。输出为:
[{Name:A Description:Monotremata} {Name:B Description:} {Name:C Description:}]
如您所见,无法区分这两种情况。
解决方案
您可以通过将字段类型更改为指针来区分空值和缺失值。如果 JSON 中存在空字符串值,则该值将被设置为指向空字符串的指针。如果 JSON 中不存在,则将其保留为 nil。
type Category struct { Name string Description *string }
经过此修改,输出将变为:
[{Name:A Description:0x1050c150} {Name:B Description:<nil>} {Name:C Description:0x1050c158}]
现在,您可以使用 nil 值来标识缺少字段并进行相应处理。
以上是在 Go 中解组 JSON 时如何区分空值和缺失值?的详细内容。更多信息请关注PHP中文网其他相关文章!