首頁 > 後端開發 > Golang > 如何使用「0」和「false」(以及「1」和「true」)處理 JSON 的布林解組?

如何使用「0」和「false」(以及「1」和「true」)處理 JSON 的布林解組?

Linda Hamilton
發布: 2024-11-26 10:11:13
原創
133 人瀏覽過

How to Handle Boolean Unmarshalling from JSON with

從 JSON 解組包含 0 和 False 的布林值

解析 JSON 資料需要仔細考慮資料類型以避免誤解。在服務將布林值交換為 0 和 false(以及 1 和 true)的情況下,實現正確的解組變得至關重要。

內建的編碼/json 套件提供了一種使用自訂類型自訂解組過程的方法。透過定義自訂類型,您可以實現自訂的解組邏輯來處理所需的轉換。

自訂解組類型

建立實作 json.Unmarshaler 介面的自訂類型。此類型將負責將 JSON 資料轉換為所需的布林格式。

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
}
登入後複製

在此範例中,ConvertibleBoolean 是實作 json.Unmarshaler 介面的自訂布林類型。它會覆寫預設的 JSON 解組過程,並將傳入資料檢查為字串。如果它標識了表示 true 或 false 的字串(或其對應的數字 1 和 0),則會相應地設定 ConvertibleBoolean 值。否則,將傳回錯誤。

使用自訂類型

現在您已經有了自訂解組類型,可以在結構體中使用它來定義預期的 JSON 結構。

type MyType struct {
    AsBoolean ConvertibleBoolean `json:"field1"`
    AlsoBoolean ConvertibleBoolean `json:"field2"`
}
登入後複製

範例解組

使用自訂類型後,您可以將JSON 資料解組為MyType 結構,將0 和false(以及1 和true )正確轉換為布林值。

input_json := `{
    "field1" : true,
    "field2" : 1
}`

obj := MyType{}
json_err := json.Unmarshal([]byte(input_json), &obj)
fmt.Printf("%v\n", obj.AsBoolean) //"true"
fmt.Printf("%v\n", obj.AlsoBoolean) //"true"
登入後複製

此範例 JSON 資料包含“true”和“1”,預設解組器會將其視為不同型別。然而,透過使用 ConvertibleBoolean,這兩個值都被正確地解組為 true。

以上是如何使用「0」和「false」(以及「1」和「true」)處理 JSON 的布林解組?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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