ホームページ >バックエンド開発 >Golang >Go で混合型 JSON 配列をシリアル化および逆シリアル化する方法は?

Go で混合型 JSON 配列をシリアル化および逆シリアル化する方法は?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-10 13:38:10874ブラウズ

How to Serialize and Deserialize Mixed-Type JSON Arrays in Go?

Go で混合型 JSON 配列をシリアル化する

Go で、文字列、浮動小数点、Unicode 文字を含む混合型 JSON 配列をシリアル化する、課題が生じる可能性があります。 Python では混合型の配列が可能ですが、Go にはこの機能がありません。

MarshalJSON によるシリアル化

シリアル化をカスタマイズするために、Go は json.Marshaler インターフェイスを提供します。このインターフェイスを実装することで、構造体 Row をエンコードする方法を指定できます。この場合、それを異種の値の配列としてエンコードする必要があります。

type Row struct {
    Ooid  string
    Score float64
    Text  string
}

func (r *Row) MarshalJSON() ([]byte, error) {
    arr := []interface{}{r.Ooid, r.Score, r.Text}
    return json.Marshal(arr)
}

MarshalJSON は、インターフェースの中間スライスを取得して混合値をエンコードし、エンコードされた JSON バイトを返します。

UnmarshalJSON による逆シリアル化

へJSON バイトから構造体に逆シリアル化する場合、Go は json.Unmarshaler インターフェースを提供します。

func (r *Row) UnmarshalJSON(bs []byte) error {
    arr := []interface{}{}
    json.Unmarshal(bs, &arr)
    // TODO: add error handling here.
    r.Ooid = arr[0].(string)
    r.Score = arr[1].(float64)
    r.Text = arr[2].(string)
    return nil
}

UnmarshalJSON は同様のインターフェースの中間スライスを使用します。{} 🎜>これらのインターフェイスを実装することで、シリアル化と逆シリアル化のプロセスを制御できるようになり、混合型の配列を操作できるようになります。行きましょう

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

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