Menyahkod JSON dengan Penukaran Jenis daripada String kepada float64 dalam Go
Menghuraikan rentetan JSON yang mengandungi nilai float64 boleh menimbulkan cabaran apabila nilai disimpan sebagai rentetan. Untuk menangani isu ini, Go menyediakan penyelesaian yang mudah.
Memahami Ralat:
Apabila cuba menyahkod rentetan JSON seperti "{"name":"Galaxy Nexus ", "price":"3460.00"}" menggunakan fungsi json.Unmarshal, anda mungkin menghadapi perkara berikut ralat:
json: cannot unmarshal string into Go value of type float64
Ralat ini berlaku kerana penyahkod JSON cuba menukar perwakilan rentetan nombor float64 kepada nilai float64 secara langsung, yang tidak disokong.
Penyelesaian: Anotasi Penukaran Taip
Untuk menyelesaikan isu ini, anda perlu mengarahkan penyahkod secara eksplisit untuk merawat rentetan sebagai float64 menggunakan anotasi penukaran jenis. Anotasi ini ditambahkan pada definisi medan dalam struct Produk:
type Product struct { Name string Price float64 `json:",string"` }
Teg ",string" memberitahu penyahkod JSON bahawa medan Harga ialah rentetan yang harus ditukar kepada float64.
Kod Kemas Kini:
Berikut ialah Go yang dikemas kini kod:
package main import ( "encoding/json" "fmt" ) type Product struct { Name string Price float64 `json:",string"` } func main() { s := `{"name":"Galaxy Nexus", "price":"3460.00"}` var pro Product err := json.Unmarshal([]byte(s), &pro) if err == nil { fmt.Printf("%+v\n", pro) } else { fmt.Println(err) fmt.Printf("%+v\n", pro) } }
Output Jangkaan:
Menjalankan kod ini akan menghasilkan output yang dijangkakan:
{Name:Galaxy Nexus Price:3460}
Fungsi json.Unmarshal berjaya menyahkod rentetan JSON dan menukar harga daripada rentetan kepada float64.
Atas ialah kandungan terperinci Bagaimana untuk Menyahkod Rentetan JSON dengan Nilai Float64 yang Disimpan sebagai Rentetan dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!