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.
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.
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]]}
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!