首頁 >後端開發 >Golang >在 Go 中解組 JSON 時如何區分空值和缺失值?

在 Go 中解組 JSON 時如何區分空值和缺失值?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-04 09:40:15174瀏覽

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