Go での異種 JSON 配列のシリアル化
Go での異種 JSON 配列 (文字列、数値、Unicode 文字の混合を含む) のシリアル化この言語では混合型スライスが禁止されているため、問題が生じます。次の目的の JSON 構造について考えてみましょう。
{ results: [ ["ooid1", 2.0, "Söme text"], ["ooid2", 1.3, "Åther text"], ] }
マーシャラー インターフェイスによるシリアル化
シリアル化をカスタマイズするには、Row 型の json.Marshaler インターフェイスを実装できます。インターフェースの中間スライスを使用して、異種の値をエンコードします。
package main import ( "encoding/json" "fmt" ) 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 メソッドは Row を混合型の配列に変換します。
Unmarshaler インターフェイスによる逆シリアル化
同様に実装できます。異種の値を構造化するための json.Unmarshaler インターフェイス:
func (r *Row) UnmarshalJSON(bs []byte) error { arr := []interface{}{} json.Unmarshal(bs, &arr) r.Ooid = arr[0].(string) r.Score = arr[1].(float64) r.Text = arr[2].(string) return nil }
このメソッドは、JSON バイトを Row 構造に変換して戻します。
以上がGo で異種 JSON 配列をシリアル化および逆シリアル化する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。