ホームページ > バックエンド開発 > Golang > Go で JSON シリアル化および逆シリアル化で混合型配列を処理するにはどうすればよいですか?

Go で JSON シリアル化および逆シリアル化で混合型配列を処理するにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2024-12-10 05:19:13
オリジナル
321 人が閲覧しました

How Can I Handle Mixed-Type Arrays in JSON Serialization and Deserialization with Go?

Go での混合型配列の JSON シリアル化のカスタマイズ

Go では、ネイティブ配列とスライスに混合型の要素を含めることはできません。ただし、シリアル化された JSON データに異種配列が必要なシナリオに対応するために、 json.Marshaler インターフェイスと json.Unmarshaler インターフェイスを利用して、オブジェクトのシリアル化および逆シリアル化の方法をカスタマイズできます。

混合型要素を含む構造体:

次のような構造体 Row を考えてみましょう。フィールド:

type Row struct {
    Ooid string
    Score float64
    Text  rune
}
ログイン後にコピー

各構造体を 3 つの要素の配列としてシリアル化する必要がありますが、構造体を直接使用すると、出力が辞書のような構造体に変換されます。

MarshalJSON を使用したシリアル化のカスタマイズ:

シリアル化プロセスを制御するには、 Row 型の json.Marshaler インターフェイス。ここでは、混合値をエンコードするための仲介手段としてインターフェースのスライスを使用します。

func (r *Row) MarshalJSON() ([]byte, error) {
    arr := []interface{}{r.Ooid, r.Score, r.Text}
    return json.Marshal(arr)
}
ログイン後にコピー

UnmarshalJSON による逆シリアル化のカスタマイズ:

逆に、逆シリアル化の場合は、 Row 型に json.Unmarshaler インターフェイスを実装できます。シリアル化と同様に、インターフェイスのスライスを利用して逆シリアル化された値を保存し、構造体フィールドに割り当てます。

func (r *Row) UnmarshalJSON(bs []byte) error {
    arr := []interface{}{}
    json.Unmarshal(bs, &arr)
    // TODO: handle errors if necessary
    r.Ooid = arr[0].(string)
    r.Score = arr[1].(float64)
    r.Text = arr[2].(string)
    return nil
}
ログイン後にコピー

例:

次の JSON 構造を考えてみましょう:

[
  ["ooid1", 2.0, "Söme text"],
  ["ooid2", 1.3, "Åther text"]
]
ログイン後にコピー

カスタマイズされたシリアル化関数と逆シリアル化関数を使用すると、次のことができます。この JSON データを Row 要素のスライスに変換し、異種配列形式を維持しながら元の JSON 構造に戻します。

要約すると、シリアル化と逆シリアル化をカスタマイズすることで、Go 開発者が複雑な JSON データ構造を処理できるようになります。これには型が混在した配列が含まれており、さまざまなデータ形式との柔軟性と互換性が提供されます。

以上がGo で JSON シリアル化および逆シリアル化で混合型配列を処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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