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:
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!