首页 >后端开发 >Golang >在 Go 中解组 JSON 时如何区分空值和缺失值?

在 Go 中解组 JSON 时如何区分空值和缺失值?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-12-04 09:40:15177浏览

How Can I Differentiate Between Empty and Missing Values When Unmarshaling JSON in Go?

在 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn