Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Menangkap dan Menyahkod Badan Permintaan JSON dalam Go?

Bagaimana untuk Menangkap dan Menyahkod Badan Permintaan JSON dalam Go?

Susan Sarandon
Susan Sarandonasal
2024-11-02 14:39:30911semak imbas

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>

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!

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