JSON を「json」でタグ付けされたフィールドを持つ構造体にアンマーシャリングする方法

Linda Hamilton
リリース: 2024-11-02 00:02:02
オリジナル
176 人が閲覧しました

How to Unmarshal JSON into a Struct with a Field Tagged with

「json」でタグ付けされたフィールドを持つ構造体への JSON のアンマーシャリング

JSON を構造体にアンマーシャリングしようとすると、特定のフィールドが「json」タグ。このタグには、JSON データが構造体内で目的の文字列形式に正しく変換されるようにするための特別な処理が必要です。

この例では、構造体 A には、sql:"type:json" でタグ付けされたフィールド S があります。目標は、提供された JSON データの「S」の値を A 構造体内の文字列形式にアンマーシャリングすることです。

最初は、フィールド タグに文字列「json」が含まれているかどうかをチェックするためにリフレクションを使用することを検討したかもしれません。 " そして、JSON データをそのフィールドに文字列としてアンマーシャリングします。ただし、より効率的で洗練されたアプローチは、Go の標準ライブラリ機能を使用することです。

カスタム タイプとマーシャル/アンマーシャル メソッドの使用

これを実現する 1 つの方法は、カスタム タイプ RawString を定義して実装することです。そのための MarshalJSON メソッドと UnmarshalJSON メソッド。これらのメソッドは、JSON データのエンコード方法とデコード方法をそれぞれ制御する方法を提供します。

この例では、RawString 型は文字列値をラップします。 MarshalJSON メソッドは文字列値をバイト スライスとして返しますが、UnmarshalJSON メソッドは受信したデータを既存の RawString に追加します。

JSON のマーシャリングとアンマーシャリング

次のステップは、A を定義することです。構造体。これには、I フィールド (64 ビット整数) と、RawString 型の S フィールドが含まれます。

これらのカスタム型とメソッドを使用すると、提供された JSON データを A 構造体にアンマーシャリングできます。次の Go コードはこれを示しています。

<code class="go">import (
    "encoding/json"
    "fmt"
    "log"
)

// RawString is a raw encoded JSON object.
// It implements Marshaler and Unmarshaler and can
// be used to delay JSON decoding or precompute a JSON encoding.
type RawString string

// MarshalJSON returns *m as the JSON encoding of m.
func (m *RawString) MarshalJSON() ([]byte, error) {
    return []byte(*m), nil
}

// UnmarshalJSON sets *m to a copy of data.
func (m *RawString) UnmarshalJSON(data []byte) error {
    if m == nil {
        return errors.New("RawString: UnmarshalJSON on nil pointer")
    }
    *m += RawString(data)
    return nil
}

const data = `{"i":3, "S":{"phone": {"sales": "2223334444"}}}`

type A struct {
    I int64
    S RawString `sql:"type:json"`
}

func main() {
    a := A{}
    err := json.Unmarshal([]byte(data), &a)
    if err != nil {
        log.Fatal("Unmarshal failed", err)
    }
    fmt.Println("Done", a)
}</code>
ログイン後にコピー

このアプローチを使用すると、JSON データを「json」タグが付けられたフィールドを持つ構造体に効果的にアンマーシャリングし、元の文字列形式を保持できます。

以上がJSON を「json」でタグ付けされたフィールドを持つ構造体にアンマーシャリングする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!