Heim >Backend-Entwicklung >Golang >Wie kann ich JSON mit beliebigen Schlüssel/Wert-Paaren in eine Go-Struktur entmarshalieren?

Wie kann ich JSON mit beliebigen Schlüssel/Wert-Paaren in eine Go-Struktur entmarshalieren?

Susan Sarandon
Susan SarandonOriginal
2024-10-30 06:45:281068Durchsuche

How Can I Unmarshal JSON with Arbitrary Key/Value Pairs into a Go Struct?

Unmarshaling von JSON mit beliebigen Schlüssel/Wert-Paaren zu einer Struktur

Problemstellung

Das Ziel besteht darin, eine JSON-Zeichenfolge zu entmarshalieren, die eine Mischung aus bekannten und unbekannte Schlüssel/Wert-Paare in eine Go-Struktur. Die bekannten Felder sollten in bestimmte Strukturfelder entmarshallt werden, während die unbekannten Felder als Sammlung von Schlüssel/Wert-Paaren innerhalb der Struktur gespeichert werden sollten.

Lösung

Um dies zu erreichen, kann eine Struktur mit einer Kombination aus bekannten Feldern und einem Kartenausschnitt definiert werden:

<code class="go">type Message struct {
    Known1 string `json:"known1"`
    Known2 string `json:"known2"`
    Unknowns []map[string]interface{}
}</code>

Unmarshaling-Prozess

Dieser JSON-String:

<code class="json">{"known1": "foo", "known2": "bar", "unknown1": "car", "unknown2": 1}</code>

kann wie folgt entmarshaled werden Schritte:

  1. Erstellen Sie eine Instanz der Message-Struktur.
  2. Unmarshaling der JSON-Zeichenfolge in der Struktur.
  3. Iterieren Sie nach dem Unmarshaling über das rohe JSON-Objekt und extrahieren Sie es Schlüssel und Werte der unbekannten Felder.
  4. Speichern Sie jedes unbekannte Schlüssel/Wert-Paar in einer neuen Karte und hängen Sie es an das Feld „Unbekannte“ in der Struktur an.

Alternative Lösung

Alternativ kann der JSON anstelle einer Struktur direkt in ein Map[string]interface{} entmarshaled werden, das Zugriff auf alle Schlüssel/Wert-Paare als dynamische Sammlung bietet.

<code class="go">var msg map[string]interface{}
json.Unmarshal([]byte(jsonMsg), &msg)</code>

Fazit

Die Wahl zwischen der Verwendung einer Struktur oder einer Karte hängt von den spezifischen Anforderungen der Anwendung ab. Wenn vordefinierte bekannte Felder und eine strukturierte Vorgehensweise gewünscht sind, bietet sich eine Struktur an. Wenn die genaue Natur der unbekannten Felder nicht im Voraus bekannt ist oder eine flexiblere dynamische Datenstruktur erforderlich ist, ist eine Karte eine praktikable Option.

Das obige ist der detaillierte Inhalt vonWie kann ich JSON mit beliebigen Schlüssel/Wert-Paaren in eine Go-Struktur entmarshalieren?. 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