Bagaimana untuk Mendapatkan Data JSON daripada Badan Permintaan dalam Go?

Linda Hamilton
Lepaskan: 2024-10-31 10:34:06
asal
453 orang telah melayarinya

How to Retrieve JSON Data from a Request Body in Go?

Mengambil semula JSON daripada Badan Permintaan dalam Go

Apabila bekerja dengan permintaan POST yang mengandungi kandungan JSON, adalah perlu untuk mengekstrak data JSON daripada badan permintaan itu. Walau bagaimanapun, ini boleh menjadi tugas yang membingungkan bagi pemula Go yang memindahkan kod daripada bahasa seperti Node.js.

Untuk menangani isu ini, beberapa pendekatan telah dicuba:

var v antara muka{}<br>err := json.NewDecoder(context.Request().Body).Decode(&v)<br>if err != nil {</p>
<div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">return result, err
Salin selepas log masuk
Salin selepas log masuk

}
fmt .Println(v)

Dalam contoh ini, keputusan selalunya akan kosong, menunjukkan bahawa badan kosong. Ini kerana http.Request.Body ialah penimbal dan setelah data dibaca daripadanya, ia tidak boleh dibaca semula.

Pendekatan lain ialah:

m := echo .Map{}<br>if err := context.Bind(&m); err != nil {</p>
<div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">return result, err
Salin selepas log masuk
Salin selepas log masuk

}
fmt.Println(m)

Di sini, kod tersebut menghasilkan mesej ralat "EOF ." Ralat ini berlaku kerana tiada pengepala jenis kandungan dalam permintaan, jadi Echo tidak dapat menentukan jenis data yang dihantar.

Akhir sekali, percubaan untuk membaca kandungan secara langsung:

< pra>badan, ralat := ioutil.ReadAll(context.Request().Body)
jika ralat != tiada {

return result, error
Salin selepas log masuk

}
fmt.Println(body)

Menghasilkan tatasusunan bait kosong, kerana ioutil.ReadAll() menggunakan badan permintaan.

Penyelesaian terletak pada memahami sifat http.Request.Body sebagai penimbal dan mencari cara untuk memulihkannya selepas membaca. Coretan kod berikut menyediakan penyelesaian:

// Baca kandungan Kandungan<br>var bodyBytes []byte<br>if context.Request().Body != nil {</p> <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">bodyBytes, _ = ioutil.ReadAll(context.Request().Body)
Salin selepas log masuk

}

// Pulihkan io.ReadCloser kepada keadaan asalnya
context.Request().Body = ioutil.NopCloser(bytes.NewBuffer(bodyBytes))

// Teruskan menggunakan Badan, seperti Mengikatnya pada struct:
order := new(models.GeaOrder)
error := context.Bind(order)

Dengan penyelesaian ini, kini anda boleh membaca badan, mengekalkan kandungannya untuk kegunaan kemudian dan mengikat datanya pada struktur dengan jayanya.

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

sumber:php.cn
Artikel sebelumnya:Bagaimana untuk Melaksanakan Perintah dengan Hujah Petikan Dua Kali pada Windows Menggunakan Pakej exec? Artikel seterusnya:Mengapa Adakah `pergi pasang` Abaikan Tetapan `GOPATH` Saya dan Pasang ke `GOROOT`?
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
Isu terkini
Topik-topik yang berkaitan
Lagi>
Cadangan popular
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!