使用多個表示形式解組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中文網其他相關文章!