Heim >Backend-Entwicklung >Golang >Wie kann ich verschachtelte JSON-Daten entmarshalieren, ohne deren Struktur zu kennen?
Unmarshalling von verschachteltem JSON ohne bekannte Struktur
Wenn Sie auf verschachtelte JSON-Daten ohne definierte Strukturen stoßen, gibt es mehrere Ansätze, um die Herausforderungen beim Unmarshalling zu mindern.
Vermeidung wiederholter Unmarshallings
Es ist generell ratsam, Unmarshalling-Vorgänge zu minimieren. Erwägen Sie die Implementierung eines Caching-Mechanismus, um nicht gemarshallte Objekte für die zukünftige Verwendung zu speichern und wiederholtes Unmarshalling zu vermeiden. In einigen Fällen kann jedoch ein mehrfaches Unmarshalling erforderlich sein, insbesondere wenn es um verschachtelte Strukturen unterschiedlicher Art geht.
Bestimmen der richtigen Struktur für das Unmarshalling
Methode 1: Entmarshalieren Sie die json.RawMessage in eine Map[string]-Schnittstelle{}. Dies ermöglicht die Untersuchung der verschachtelten Struktur, um den Typ und anschließend die richtige Struktur für das Unmarshalling zu ermitteln.
Beispiel:
Methode 2 : Übereinstimmung mit regulären Ausdrücken
<code class="go">var objMap map[string]interface{} json.Unmarshal(rawMessage, &objMap)</code>
Verwenden Sie einen regulären Ausdruck, um die Typzeichenfolge in den JSON-Daten abzugleichen. Sobald der Typ bekannt ist, verwenden Sie Reflektion oder einen Typschalter, um das Unmarshalieren in die entsprechende Struktur zu entpacken.
Beispiel:
Verwenden von Copy oder Regular Ausdrucksansatz
<code class="go">type Regex *regexp.Regexp // Split the JSON data into key-value pairs type KeyValue struct { Key string Value string } // Regex for extracting the type var typeRE = Regex(regexp.MustCompile(`(?m)^.*"type": "(.+)".*$`)) // Unmarshal the raw message and extract the type func getType(rawMessage []byte) (string, error) { var data KeyValue err := json.Unmarshal(rawMessage, &data) if err != nil { return "", err } matches := typeRE.FindStringSubmatch(data.Value) return matches[1], nil }</code>
Methode A: Kopieren und Unmarshalieren
Erstellen Sie eine Kopie der json.RawMessage.
Verwenden Sie den regulären Ausdruck, um den Typ zu bestimmen.
Das obige ist der detaillierte Inhalt vonWie kann ich verschachtelte JSON-Daten entmarshalieren, ohne deren Struktur zu kennen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!