Wie entmarshaliere ich JSON mit beliebigen Schlüssel/Wert-Paaren zu einer Struktur in Go?

Barbara Streisand
Freigeben: 2024-10-29 05:41:02
Original
643 Leute haben es durchsucht

How to Unmarshal JSON with Arbitrary Key/Value Pairs to a Struct in Go?

Unmarshalieren von JSON mit beliebigen Schlüssel-/Wertpaaren zum Strukturieren

Problem

Sie haben ein JSON-String mit einer Kombination aus bekannten und unbekannten Feldern. Sie müssen diesen JSON analysieren und die bekannten Felder einer Struktur zuordnen, während die unbekannten Felder erhalten bleiben.

Lösung 1: Double Unmarshal

type KnownFields struct {
    Known1 string
    Known2 string
}

type Message struct {
    Known1   string                        `json:"known1"`
    Known2   string                        `json:"known2"`
    Unknowns map[string]interface{} `json:"-"`
}

func ParseMessage(jsonStr string) (*Message, error) {
    var knownFields KnownFields
    if err := json.Unmarshal([]byte(jsonStr), &knownFields); err != nil {
        return nil, err
    }

    var m map[string]interface{}
    if err := json.Unmarshal([]byte(jsonStr), &m); err != nil {
        return nil, err
    }

    delete(m, "known1")
    delete(m, "known2")

    return &Message{
        Known1:   knownFields.Known1,
        Known2:   knownFields.Known2,
        Unknowns: m,
    }, nil
}
Nach dem Login kopieren

Lösung 2: Direktes Unmarshalieren zur Map[string]-Schnittstelle{}

type Message map[string]interface{}

func ParseMessage(jsonStr string) (*Message, error) {
    var m Message
    if err := json.Unmarshal([]byte(jsonStr), &m); err != nil {
        return nil, err
    }

    return &m, nil
}
Nach dem Login kopieren

Zusätzliche Option: Unmarshalieren zur Schnittstelle{}

func ParseMessage(jsonStr string) (interface{}, error) {
    var m interface{}
    if err := json.Unmarshal([]byte(jsonStr), &m); err != nil {
        return nil, err
    }

    return m, nil
}
Nach dem Login kopieren

Die Wahl zwischen Diese Optionen hängen von Ihren spezifischen Anforderungen ab. Lösung 1 bietet einen strukturierten Nachrichtentyp, der bekannte und unbekannte Felder klar trennt. Lösung 2 bietet einen flexibleren Ansatz und ermöglicht Ihnen den Zugriff auf alle Felder als Karte. Lösung 3 stellt eine vereinfachte Möglichkeit dar, den JSON in eine untypisierte Schnittstelle zu entpacken, die Sie dann nach Bedarf bearbeiten können.

Das obige ist der detaillierte Inhalt vonWie entmarshaliere ich JSON mit beliebigen Schlüssel/Wert-Paaren zu einer Struktur in Go?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage