Heim  >  Artikel  >  Backend-Entwicklung  >  Wie erfasst und dekodiert man den JSON-Anfragetext in Go?

Wie erfasst und dekodiert man den JSON-Anfragetext in Go?

Susan Sarandon
Susan SarandonOriginal
2024-11-02 14:39:30911Durchsuche

How to Capture and Decode JSON Request Body in Go?

Erfassen von JSON aus dem Anforderungstext in Go

Bei der Entwicklung von APIs ist es oft notwendig, den rohen JSON-Text einer POST-Anfrage zu erfassen. In Node.js ist diese Aufgabe mit der Eigenschaft „request.payload“ unkompliziert. In Go ist der Ansatz jedoch zunächst möglicherweise weniger offensichtlich.

Die Herausforderung

Der JSON-Body wird im Typ io.ReadCloser gespeichert, was dies nicht zulässt mehrere Lesevorgänge. Der Versuch, es direkt mit json.NewDecoder oder context.Bind zu dekodieren, führt aufgrund der Puffernatur des Körpers normalerweise zu leeren Nachrichten oder Fehlermeldungen.

Die Problemumgehung: Wiederherstellen des Körpers

Glücklicherweise gibt es eine Problemumgehung, die darin besteht, den Inhalt des Körpers zu erfassen, seinen ursprünglichen Zustand wiederherzustellen und dann den Dekodierungsprozess durchzuführen. Dies wird mit den folgenden Schritten erreicht:

  1. Lesen Sie den Inhalt des Körpers mit ioutil.ReadAll.
  2. Stellen Sie io.ReadCloser mit ioutil.NopCloser und einem neuen Puffer mit in seinen ursprünglichen Zustand zurück die erfassten Inhalte.
  3. Fahren Sie mit der Dekodierungslogik fort, z. B. der Bindung an eine Struktur.

Codedemonstration

Hier ist eine Beispielimplementierung :

<code class="go">// Read the Body content
var bodyBytes []byte
if context.Request().Body != nil {
    bodyBytes, _ = ioutil.ReadAll(context.Request().Body)
}

// Restore the io.ReadCloser to its original state
context.Request().Body = ioutil.NopCloser(bytes.NewBuffer(bodyBytes))

// Continue to use the Body, like Binding it to a struct:
order := new(models.GeaOrder)
error := context.Bind(order)</code>

Indem Sie diese Schritte befolgen, können Sie den JSON-Body nach Bedarf in Ihrer Go-Anwendung erfassen und dekodieren.

Das obige ist der detaillierte Inhalt vonWie erfasst und dekodiert man den JSON-Anfragetext in Go?. 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