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 サイトの他の関連記事を参照してください。