首頁 > 後端開發 > Golang > 如何自訂 JSON 解組來處理不明確的布林值?

如何自訂 JSON 解組來處理不明確的布林值?

Barbara Streisand
發布: 2024-11-29 05:49:09
原創
248 人瀏覽過

How Can I Customize JSON Unmarshaling to Handle Ambiguous Boolean Values?

在JSON 解組中擴展佈林解析選項

當映射服務輸出模糊布林類型和其他值之間的界限時,更包容的JSON解析器變得至關重要。內建的encoding/json unmarshal 函數在這方面存在不足,促使人們尋找允許的解析替代方案。

一種方法是為所需類型建立自訂 UnmarshalJSON 函數。此函數可以定義自訂解析規則來處理不明確的布林值。例如,考慮以下 ConvertibleBoolean 類型:

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」和「true」被對應為 true,而「0」和「false」則解析為 false。超出這些範圍的值會觸發錯誤。

要利用此自訂布林解析,請將 json 標籤套用至目標欄位。例如:

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

使用這些自訂解析規則,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 解組,從而可以將不明確的布林值處理為需要。

以上是如何自訂 JSON 解組來處理不明確的布林值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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