ホームページ >バックエンド開発 >Golang >曖昧なブール値を処理するために JSON アンマーシャリングをカスタマイズするにはどうすればよいですか?

曖昧なブール値を処理するために JSON アンマーシャリングをカスタマイズするにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-29 05:49:09176ブラウズ

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

JSON アンマーシャリングにおけるブール解析オプションの拡張

ブール型と他の値の間の境界線が曖昧になるサービス出力をマッピングする場合、より適応的な JSONパーサーが必須になります。組み込みのエンコーディング/json unmarshal 関数はこの点では不十分であり、寛容な解析の代替手段の探索が求められています。

1 つのアプローチは、目的の型に合わせてカスタム 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"

Byカスタム解析関数を活用すると、JSON アンマーシャリングの柔軟性が向上し、あいまいなブール値を次のように処理できるようになります。必要です。

以上が曖昧なブール値を処理するために JSON アンマーシャリングをカスタマイズするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。