Heim > Artikel > Backend-Entwicklung > Wie entmarshaliere ich verschachteltes JSON mit unbekannten Schlüsseln?
Die Begegnung mit JSON-Daten mit unbekannten Schlüsseln und komplizierten Verschachtelungsstrukturen kann eine entmutigende Aufgabe sein. Betrachten Sie das folgende JSON-Format:
{ "message": { "Server1.example.com": [ { "application": "Apache", "host": { "name": "/^Server-[13456]/" }, "owner": "User1", "project": "Web", "subowner": "User2" } ], "Server2.example.com": [ { "application": "Mysql", "host": { "name": "/^Server[23456]/" }, "owner": "User2", "project": "DB", "subowner": "User3" } ] }, "response_ms": 659, "success": true }
Wie in diesem Beispiel dargestellt, sind Servernamen (Server[0-9].example.com) nicht vorbestimmt und können variieren. Darüber hinaus fehlt dem Feld nach Servernamen ein expliziter Schlüssel.
Um diese Daten effektiv zu erfassen, können wir eine Map[string]ServerStruct-Struktur verwenden:
type YourStruct struct { Success bool ResponseMS int Servers map[string]*ServerStruct } type ServerStruct struct { Application string Owner string [...] }
Durch die Einbindung dieser Strukturen ermöglichen wir die Zuordnung unbekannter Servernamen in die Karte.
Um beim Unmarshalling des JSON noch weiter zu glänzen, sollten Sie das Hinzufügen notwendiger JSON-Tags in Betracht ziehen:
import "encoding/json" // YourStruct contains the JSON structure with success, response time, and a map of servers type YourStruct struct { Success bool ResponseMS int `json:"response_ms"` Servers map[string]*ServerStruct `json:"message"` } // ServerStruct holds server information, including application, owner, etc. type ServerStruct struct { Application string `json:"application"` Owner string `json:"owner"` [...] } // UnmarshalJSON is a custom unmarshaller that handles nesting and unknown keys func (s *YourStruct) UnmarshalJSON(data []byte) error { type YourStructHelper struct { Success bool ResponseMS int `json:"response_ms"` Servers map[string]ServerStruct `json:"message"` } var helper YourStructHelper if err := json.Unmarshal(data, &helper); err != nil { return err } s.Success = helper.Success s.ResponseMS = helper.ResponseMS s.Servers = make(map[string]*ServerStruct) for k, v := range helper.Servers { s.Servers[k] = &v // Explicitly allocate memory for each server } return nil }
Mit diesen Anpassungen können Sie das bereitgestellte JSON effektiv in Ihre benutzerdefinierte Struktur entmarshallen und so den Weg dafür ebnen mühelose Datenmanipulation.
Das obige ist der detaillierte Inhalt vonWie entmarshaliere ich verschachteltes JSON mit unbekannten Schlüsseln?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!