從 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中文網其他相關文章!