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

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

DDD
DDDOriginal
2024-10-26 16:35:30722Durchsuche

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

Unmarshalling von JSON mit beliebigen Schlüssel/Wert-Paaren in eine Struktur

Viele ähnliche Fragen wurden bezüglich der Unmarshalling von JSON mit unbekannten/willkürlichen Schlüssel/Wert-Paaren in eine Struktur gestellt. Allerdings bot keine der gefundenen Lösungen eine einfache und elegante Methode, um dies zu erreichen.

Problemstellung

Wir haben eine JSON-Zeichenfolge mit bekannten Feldern (immer vorhanden) und einer unbekannten Anzahl unbekannter/ beliebige Felder. Beispiel:

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

In diesem Beispiel sind „known1“ und „known2“ bekannte Felder, während „unknown1“ und „known2“ beliebige Felder sind. Die unbekannten Felder können einen beliebigen Namen (Schlüssel) und Wert (String, Bool, Float64 oder Int) haben.

Unser Ziel ist es, eine idiomatische Möglichkeit zu finden, eine solche JSON-Nachricht in eine Struktur zu analysieren.

Vorgeschlagene Lösung

Wir können die folgende Struktur definieren:

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

Mit dieser Struktur sollte die Beispiel-JSON-Nachricht das folgende Ergebnis liefern:

{Known1:foo Known2:bar Unknowns:[map[unknown1:car] map[unknown2:1]]}

Alternative Lösung

Eine weitere Option besteht darin, das JSON in eine Map[string]-Schnittstelle{} zu entmarshalieren:

<code class="go">import (
    "encoding/json"
    "fmt"
)

func main() {
    jsonMsg := `{"known1": "foo", "known2": "bar", "unknown1": "car", "unknown2": 1}`
    var msg map[string]interface{}
    fmt.Println(json.Unmarshal([]byte(jsonMsg), &msg))
    fmt.Printf("%+v", msg)
}</code>

Dies führt zu:

<nil>
map[known1:foo known2:bar unknown1:car unknown2:1]

Der Vorteil von Dieser Ansatz besteht darin, dass wir über die Schlüssel und Werte iterieren und die erforderlichen Typzusicherungen durchführen können, um die Daten zu verarbeiten. Abhängig von unseren Anforderungen können wir eine Struktur mit den Daten füllen oder auch nicht.

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