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 サイトの他の関連記事を参照してください。