首頁 >後端開發 >Golang >在 Go 中解組 JSON 時如何區分空白欄位和未定義欄位?

在 Go 中解組 JSON 時如何區分空白欄位和未定義欄位?

Patricia Arquette
Patricia Arquette原創
2024-12-12 20:32:15372瀏覽

How Can I Differentiate Between Empty and Undefined Fields When Unmarshaling JSON in Go?

揭開Void:辨識Go 解組過程中未定義的欄位

將JSON 資料解組過程中未定義的欄位

var jsonBlob = []byte(`[
    {"Name": "A", "Description": "Monotremata"},
    {"Name": "B"},
    {"Name": "C", "Description": ""}
]`)

type Category struct {
    Name  string
    Description string
}

var categories []Category
err := json.Unmarshal(jsonBlob, &categories)

if err != nil {
    fmt.Println("error:", err)
}
fmt.Printf("%+v", categories)

將JSON 資料解組到Go 結構體時,區分開空值和未指定欄位對於處理資料不一致至關重要。考慮以下範例:

[
  {Name:A Description:Monotremata}
  {Name:B Description:}
  {Name:C Description:}
]

執行此程式碼將產生以下輸出:

如您所見,不可能區分未定義的「描述」欄位(如在「類別B」中)和一個空的「描述」欄位(如在「類別C」)。這種歧義可能會導致不正確的程序行為。

解決方案:使用指標來區分

type Category struct {
    Name        string
    Description *string
}

要克服這項挑戰,您可以將欄位類型修改為指標。如果 JSON 資料包含空字串值,則會建立指向空字串的指標。但是,如果 JSON 資料中不存在該字段,則它將保持為 nil。

[
  {Name:A Description:0x1050c150}
  {Name:B Description:<nil>}
  {Name:C Description:0x1050c158}
]

透過此修改,更新後的輸出將變為:

現在,您可以輕鬆地區分空值和未指定的欄位。非 nil 指標表示空值,而 nil 指標表示該欄位不存在於 JSON 資料中。這允許您在程式中以不同的方式處理這些情況,確保資料準確性和適當的行為。

以上是在 Go 中解組 JSON 時如何區分空白欄位和未定義欄位?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn