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

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

Mary-Kate Olsen
發布: 2024-12-04 09:40:15
原創
239 人瀏覽過

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板