ホームページ > バックエンド開発 > Golang > Go でアンマーシャリングするときに複数の JSON ブール表現を処理するにはどうすればよいですか?

Go でアンマーシャリングするときに複数の JSON ブール表現を処理するにはどうすればよいですか?

Susan Sarandon
リリース: 2024-12-09 00:19:15
オリジナル
345 人が閲覧しました

How to Handle Multiple JSON Boolean Representations When Unmarshalling in Go?

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート