ホームページ >バックエンド開発 >Golang >JSON をアンマーシャリングするときに、あいまいなブール値 (0/1、true/false) を処理するにはどうすればよいですか?

JSON をアンマーシャリングするときに、あいまいなブール値 (0/1、true/false) を処理するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-11-26 22:06:15641ブラウズ

How Can I Handle Ambiguous Boolean Values (0/1, true/false) When Unmarshalling JSON?

アンマーシャリングを使用した JSON 内の曖昧なブール値の処理

ブール値を 0 と false (または 1 と true) として一貫性なく表すサービスの出力をマッピングする場合、アンマーシャリング中に、より寛容なアプローチを採用することが必要になります。 JSON タグに ,string を追加するだけでは十分ではないかもしれませんが、利用可能な代替ソリューションがあります。

カスタム タイプの実装

解決策は、あいまいな値を処理するために ConvertibleBoolean などのカスタム タイプを定義することです。ブール値。この型には、指定された規則に基づいて入力データをブール値に変換する UnmarshalJSON メソッドが含まれています。

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」や「0」などの入力値がブール値として解釈されるようになります。

Pointer Method Receiver

で次の点に注意することが重要です。カスタム UnmarshalJSON メソッドが正しく機能するには、このメソッドをポインター メソッド レシーバーとして実装する必要があります。これは、ポインタを使用すると基になる値を変更できるためです。

このアプローチを利用すると、JSON データから曖昧なブール値を効果的にアンマーシャリングでき、入力データに矛盾があるにもかかわらず、結果の構造体に期待される値が含まれるようになります。 .

以上がJSON をアンマーシャリングするときに、あいまいなブール値 (0/1、true/false) を処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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