Wie kann ich beim Unmarshalling in Go mit verschiedenen JSON-Formaten umgehen?

Linda Hamilton
Freigeben: 2024-10-26 23:55:30
Original
251 Leute haben es durchsucht

How Can I Handle Diverse JSON Formats When Unmarshalling in Go?

Unmarshal anpassen, um verschiedene JSON-Formate zu verarbeiten

Beim Zugriff auf externe APIs stoßen Entwickler häufig auf unterschiedliche JSON-Antwortformate, was beim Unmarshalling von Daten zu Herausforderungen führt eine einheitliche Struktur. In Go ist es mit ein paar Techniken möglich, diese Unterschiede elegant zu bewältigen.

Nehmen Sie das Beispiel eines API-Endpunkts, der JSON-Nachrichten in zwei Formaten zurückgibt, entweder als Zeichenfolge „Nachricht“ oder als Array von Fehlercodes [ „ERROR_CODE“]. Um diese Variante zu verwalten, kann eine benutzerdefinierte Struktur definiert werden, die die Antwort enthält:

<code class="go">type Response struct {
    Message interface{} `json:"message"`
}</code>
Nach dem Login kopieren

Durch die Festlegung des Nachrichtenfelds als Schnittstellentyp ermöglicht das dynamische Typisierungssystem von Go die Speicherung verschiedener Datentypen. Diese Flexibilität bietet einen Ausgangspunkt für die Handhabung der verschiedenen Antwortformate.

Um den JSON in die Antwortstruktur zu entmarshalieren, würde ein Aufruf von json.Unmarshal verwendet. Da das Nachrichtenfeld jedoch verschiedene Typen enthalten kann, entsteht ein Sonderfall, wenn der JSON ein Array darstellt (die Fehlerantwort). Standardmäßig werden JSON-Arrays in Werte vom Typ []interface{} entmarshallt.

Der Schlüssel zum Umgang mit dieser Unterscheidung liegt in der Untersuchung des Typs des entmarshallten Nachrichtenfelds. Dies kann mit einer Typzusicherung oder einem Typwechsel erreicht werden, wie unten beispielhaft dargestellt:

<code class="go">    switch x := r.Message.(type) {
    case string:
        fmt.Println("Success, message:", x)
    case []interface{}:
        fmt.Println("Error, code:", x)
    default:
        fmt.Println("Something else:", x)
    }</code>
Nach dem Login kopieren

In diesem Snippet wird der Typ von r.Message untersucht. Wenn es sich um eine Zeichenfolge handelt, zeigt dies eine Erfolgsmeldung an. Wenn es sich um eine Schnittstelle von Schnittstellen handelt, stellt es eine Fehlerantwort mit dem Fehlercode dar. Andernfalls wird es als unerwartete Antwort betrachtet.

Durch die Verwendung dieser Technik können Entwickler JSON-Antworten mit unterschiedlichen Formaten effektiv in einer einheitlichen Struktur entmarsingen und so eine anschließende Verarbeitung und Entscheidungsfindung basierend auf dem Nachrichtentyp ermöglichen.

Das obige ist der detaillierte Inhalt vonWie kann ich beim Unmarshalling in Go mit verschiedenen JSON-Formaten umgehen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!