複数の表現を持つ 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 データをアンマーシャルできます。 booleans:
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 中国語 Web サイトの他の関連記事を参照してください。