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

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

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-11 14:57:10471ブラウズ

How to Serialize and Deserialize Heterogeneous JSON Arrays in Go?

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

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