首頁 >後端開發 >Golang >在 Go 中解組時如何處理多個 JSON 布林表示?

在 Go 中解組時如何處理多個 JSON 布林表示?

Susan Sarandon
Susan Sarandon原創
2024-12-09 00:19:15313瀏覽

How to Handle Multiple JSON Boolean Representations When Unmarshalling in Go?

使用多個表示形式解組JSON 布林值

將JSON 解組為布林類型時,內建的編碼/json 解組函數需要這樣的值為“真”和“假”。但是,某些服務可能會交換布林類型的“0”和“false”(以及“1”和“true”)。

為了適應這種靈活性,可以創建一個自訂解組函數來轉換將「0」、「1」、「false」和「true」等字串值轉換為所需的布林表示形式。

這是自訂類型的範例ConvertibleBoolean 可用於解組具有多種表示形式的布林值:

import (
    "encoding/json"
    "errors"
)

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 類型欄位的結構體,並將包含“0”和“false”的JSON資料解組為布林值:

type MyType struct {
    AsBoolean ConvertibleBoolean `json:"field1"`
    AlsoBoolean ConvertibleBoolean `json:"field2"`
}

使用可轉換布林值解組輸入JSON 時,結構中的ConvertibleBoolean 欄位會正確填入:

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"

透過使用像ConvertibleBoolean這樣的自訂解組函數,當解組到Go 結構體時,可以處理JSON 資料中具有多種表示形式的布林值。

以上是在 Go 中解組時如何處理多個 JSON 布林表示?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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