Go で混合型 JSON 配列をシリアル化する方法
チャレンジ
JSON の作成文字列、浮動小数点数、および浮動小数点数の混合など、異種データを表す配列。 Unicode 文字は、配列内の混合型がサポートされていないため、Go では困難になる可能性があります。
解決策
この制限を克服するには、Go のカスタマイズ可能な JSON を活用できます。 json.Marshaler インターフェイスと json.Unmarshaler インターフェイスを実装することによるシリアル化メカニズム。カスタム型でこれらの関数を定義することにより、データのシリアル化と逆シリアル化の方法を制御できるようになります。
シリアル化 (マーシャリング)
混合型データをシリアル化するにはJSON 配列に変換するには、カスタム タイプの MarshalJSON 関数を作成します。この関数では、interface 要素の中間スライスを作成し、シリアル化する値をそれに埋めます。{}次に、スライスで json.Marshal 関数を使用して、データの JSON 表現を生成します。
逆シリアル化 (アンマーシャリング)
同様に、逆シリアル化の場合、 UnmarshalJSON 関数。ここでは、まず json.Unmarshal 関数を使用して、受信した JSON バイトを解析して、interface 要素の中間スライスに入れます。{}次に、スライスから値を手動で抽出し、カスタム タイプのフィールドに割り当てます。
例
次の例は、混合オブジェクトをシリアル化および逆シリアル化する方法を示しています。 -型データ構造:
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) } func main() { rows := []Row{ {"ooid1", 2.0, "Söme text"}, {"ooid2", 1.3, "Åther text"}, } marshalled, _ := json.Marshal(rows) fmt.Println(string(marshalled)) }
結論
json.Marshaler インターフェイスと json.Unmarshaler インターフェイスを実装することにより、Go で混合型のデータ構造を処理する柔軟性が得られます。このアプローチにより、シリアル化と逆シリアル化のプロセスをカスタマイズして、目的の JSON 配列形式を生成できます。
以上がGo で混合型の JSON 配列をシリアル化する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。