Bagaimana untuk Menangkap dan Menyahkod Badan Permintaan JSON dalam Go?

Susan Sarandon
Lepaskan: 2024-11-02 14:39:30
asal
931 orang telah melayarinya

How to Capture and Decode JSON Request Body in Go?

Menangkap JSON daripada Badan Permintaan dalam Go

Apabila membangunkan API, selalunya perlu untuk menangkap badan JSON mentah permintaan POST. Dalam Node.js, tugas ini adalah mudah dengan sifat request.payload. Walau bagaimanapun, dalam Go, pendekatan pada mulanya mungkin kurang jelas.

Cabaran

Isi JSON disimpan dalam jenis io.ReadCloser, yang tidak membenarkan berbilang bacaan. Percubaan untuk menyahkodnya terus menggunakan json.NewDecoder atau context.Bind biasanya akan menghasilkan mesej kosong atau ralat disebabkan oleh sifat penimbal badan.

Penyelesaian: Memulihkan Badan

Nasib baik, terdapat penyelesaian yang melibatkan menangkap kandungan badan, memulihkan keadaan asalnya, dan kemudian melakukan proses penyahkodan. Ini dicapai menggunakan langkah berikut:

  1. Baca kandungan badan menggunakan ioutil.ReadAll.
  2. Pulihkan io.ReadCloser kepada keadaan asalnya menggunakan ioutil.NopCloser dan penimbal baharu dengan kandungan yang ditangkap.
  3. Teruskan dengan logik penyahkodan, seperti mengikat pada struct.

Demonstrasi Kod

Berikut ialah contoh pelaksanaan:

<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>
Salin selepas log masuk

Dengan mengikuti langkah ini, anda boleh menangkap dan menyahkod Badan JSON seperti yang diperlukan dalam aplikasi Go anda.

Atas ialah kandungan terperinci Bagaimana untuk Menangkap dan Menyahkod Badan Permintaan JSON dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!