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

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

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-11 09:29:10124ブラウズ

How to Serialize a Mixed-Type JSON Array in Go?

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

Go で、文字列、浮動小数点数、Unicode 文字の異種配列をシリアル化して、 JSON 配列は、混合型配列のサポートが組み込まれていないため、難しく見えるかもしれません。ただし、json.Marshaler インターフェイスを実装することで、これを実現するためにオブジェクトがシリアル化される方法をカスタマイズできます。

MarshalJSON メソッドの実装

Row のような構造を次のようにシリアル化するには配列の配列の場合、Row 型で MarshalJSON メソッドを作成します。このメソッドは、Row 構造体を汎用インターフェイス値の配列に変換し、json.Marshal を使用してシリアル化します。

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

使用例

の MarshalJSON メソッドを使用します。 Row 要素のスライスを有効な JSON にシリアル化できます。 array:

rows := []Row{{"ooid1", 2.0, "Söme text"}, {"ooid2", 1.3, "Åther text"}}
marshalled, _ := json.Marshal(rows)

// Output:
// {"results": [["ooid1", 2.0, "Söme text"], ["ooid2", 1.3, "Åther text"]]}

JSON からのアンマーシャリング

必要に応じて、JSON データを Row 構造体に逆シリアル化する json.Unmarshaler インターフェイスを実装することもできます。これには、インターフェイス値の中間スライスを使用して、JSON 配列から抽出された値を保存するという同様のアプローチが含まれます。

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
}

json.Marshaler インターフェイスと json.Unmarshaler インターフェイスを実装することで、効果的にシリアル化および逆シリアル化できます。 Go の混合型配列により、異種要素を含むデータ構造を JSON として操作できるようになります。

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

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