0 と False の両方を含む JSON からのブール値のアンマーシャリング
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 中国語 Web サイトの他の関連記事を参照してください。