Heim >Backend-Entwicklung >Golang >Wie kann ich inkonsistente JSON-Felder (Strings vs. Arrays) in Go behandeln?

Wie kann ich inkonsistente JSON-Felder (Strings vs. Arrays) in Go behandeln?

DDD
DDDOriginal
2024-12-06 15:30:13318Durchsuche

How Can I Handle Inconsistent JSON Fields (Strings vs. Arrays) in Go?

Unmarshalling von JSON mit inkonsistenten Feldern: Umgang mit Strings und Arrays

Beim Unmarshalling von JSON-Daten in eine Go-Struktur kann die Handhabung von Feldern eine Herausforderung sein das kann in der Art variieren. Beispielsweise kann ein Feld in den meisten Fällen eine Zeichenfolge sein, gelegentlich jedoch auch ein Array von Zeichenfolgen. Um dieses Problem anzugehen, präsentieren wir eine Lösung, die die leistungsstarken JSON-Parsing-Funktionen von Go nutzt.

Erfassen des variierenden Felds mit json.RawMessage

Der Schlüssel zum Umgang mit inkonsistenten JSON-Feldern liegt in der Erfassung der Rohdaten mit json.RawMessage. Bei diesem Typ handelt es sich um einen Byte-Slice, der den nicht geparsten JSON-Wert speichert. Durch das Speichern der Rohdaten haben wir die Flexibilität, sie später abhängig von ihrem spezifischen Typ zu analysieren.

Ausblenden des DisplayName-Felds und Ausfüllen nach der Dekodierung

Um dies zu verhindern Damit der Decoder nicht versucht, das DisplayName-Feld zu interpretieren, bevor wir über die relevanten Daten verfügen, verbergen wir sie mithilfe des JSON-Namens „-“. Dieser Name weist den Decoder an, das Feld beim ersten Unmarshalling zu ignorieren. Nachdem der JSON der obersten Ebene dekodiert wurde, füllen wir das DisplayName-Feld manuell basierend auf den analysierten Rohdaten aus.

Umgang mit den verschiedenen Arten von Rohdaten

Je nachdem Unabhängig davon, ob die Rohdaten ein String oder ein Array von Strings sind, gehen wir wie folgt vor:

  • Wenn die Rohdaten ein String sind, wir Entpacken Sie es in eine einzelne Zeichenfolge und weisen Sie es DisplayName zu.
  • Wenn es sich bei den Rohdaten um ein Array von Zeichenfolgen handelt, entpacken wir es in ein Segment von Zeichenfolgen und speichern es in DisplayName, nachdem wir die Zeichenfolgen mit einem Trennzeichen verbunden haben.

Einbindung in eine Schleife für MyListings

An Wenn wir eine Liste von Elementen verarbeiten, z. B. MyListings, können wir jedes Element durchlaufen und die gleiche Unmarshalling-Logik wie oben beschrieben ausführen. Dadurch können wir etwaige Inkonsistenzen im DisplayName-Feld für jedes Element behandeln.

Kapseln der Logik mit einem benutzerdefinierten Unmarshaler

Wenn mehrere Felder im Datenmodell inkonsistent sein können Für verschiedene Typen kann es von Vorteil sein, die Logik in einem benutzerdefinierten Typ zu kapseln, der die json.Unmarshaler-Schnittstelle implementiert. Dies vereinfacht den Prozess und reduziert Duplikate.

Zusammenfassend lässt sich sagen, dass wir durch die Verwendung von json.RawMessage und das Ausblenden des variierenden Felds JSON-Daten mit inkonsistenten Feldern effektiv entmarshieren können und so sicherstellen, dass alle erforderlichen Daten korrekt erfasst und analysiert werden. Die bereitgestellten Beispiele und Playground-Links demonstrieren die Lösung in der Praxis.

Das obige ist der detaillierte Inhalt vonWie kann ich inkonsistente JSON-Felder (Strings vs. Arrays) in Go behandeln?. 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