首頁 >後端開發 >Golang >解組 JSON 時如何處理不明確的布林值(0/1、真/假)?

解組 JSON 時如何處理不明確的布林值(0/1、真/假)?

Susan Sarandon
Susan Sarandon原創
2024-11-26 22:06:15638瀏覽

How Can I Handle Ambiguous Boolean Values (0/1, true/false) When Unmarshalling JSON?

透過解組處理JSON 中不明確的布林值

當映射不一致地將布林值表示為0 和false(或1 和true)的服務的輸出時,它在解組期間有必要採取更寬鬆的方法。雖然在 JSON 標籤上添加 ,string 可能還不夠,但還有其他可用的解決方案。

實作自訂類型

解決方案是定義自訂類型(例如 ConvertibleBoolean)來處理不明確的情況布林值。此類型包含一個 UnmarshalJSON 方法,該方法根據指定的約定將輸入資料轉換為布林值。

type ConvertibleBoolean bool

func (bit *ConvertibleBoolean) UnmarshalJSON(data []byte) error {
    asString := string(data)
    if asString == "1" || asString == "true" {
        *bit = true
    } else if asString == "0" || asString == "false" {
        *bit = false
    } else {
        return errors.New(fmt.Sprintf("Boolean unmarshal error: invalid input %s", asString))
    }
    return nil
}

此自訂類型可確保將「1」和「0」等輸入值解釋為布林值,允許解析而不會出現錯誤。

指標方法接收器

需要注意的是,為了自訂 UnmarshalJSON 方法要正確運行,必須將其實作為指標方法接收器。這是因為指標允許修改底層值。

透過利用此方法,您可以有效地從 JSON 資料中解組不明確的布林值,確保結果結構包含預期值,儘管輸入資料不一致.

以上是解組 JSON 時如何處理不明確的布林值(0/1、真/假)?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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