Heim >Backend-Entwicklung >Golang >Wie serialisiere und deserialisiere ich heterogene JSON-Arrays in Go?

Wie serialisiere und deserialisiere ich heterogene JSON-Arrays in Go?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-11 14:57:10463Durchsuche

How to Serialize and Deserialize Heterogeneous JSON Arrays in Go?

Serialisierung heterogener JSON-Arrays in Go

In Go Serialisierung heterogener JSON-Arrays (die eine Mischung aus Zeichenfolgen, Zahlen und Unicode-Zeichen enthalten) stellt eine Herausforderung dar, da die Sprache gemischte Slices verbietet. Betrachten Sie die folgende gewünschte JSON-Struktur:

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

Serialisierung mit einer Marshaler-Schnittstelle

Um die Serialisierung anzupassen, können wir die json.Marshaler-Schnittstelle für unseren Zeilentyp implementieren. Wir verwenden einen Zwischenabschnitt von interface{}, um die heterogenen Werte zu codieren:

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)
}

In diesem Beispiel konvertiert die MarshalJSON-Methode die Zeile in ein Array gemischter Typen.

Deserialisierung mit einer Unmarshaler-Schnittstelle

Wir können die json.Unmarshaler-Schnittstelle auf ähnliche Weise implementieren Zerstöre die heterogenen Werte:

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
}

Diese Methode konvertiert die JSON-Bytes zurück in unsere Zeilenstruktur.

Das obige ist der detaillierte Inhalt vonWie serialisiere und deserialisiere ich heterogene JSON-Arrays in Go?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn