ホームページ >バックエンド開発 >Golang >\'0\' と \'false\' (および \'1\' と \'true\') を使用して JSON からのブール アンマーシャリングを処理する方法

\'0\' と \'false\' (および \'1\' と \'true\') を使用して JSON からのブール アンマーシャリングを処理する方法

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-26 10:11:13121ブラウズ

How to Handle Boolean Unmarshalling from JSON with

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

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