Menghuraikan Integer JSON sebagai Integer dalam Go
Dalam pakej pengekodan/json Go, semua nombor semasa penghuraian JSON ditafsirkan sebagai terapung secara lalai. Walau bagaimanapun, untuk membezakan dengan tepat antara integer dan terapung semasa menghuraikan data JSON, pertimbangkan pendekatan berikut:
Contoh: Menggunakan Nilai JSON Tersuai
Gunakan json.RawMessage dan strconv untuk menghuraikan nombor sebagai int dan terapung, sambil menganggap nilai lain sebagai ialah:
package main import ( "encoding/json" "fmt" "strconv" ) func main() { str := `{"a":123,"b":12.3,"c":"123","d":"12.3","e":true}` var raw map[string]json.RawMessage err := json.Unmarshal([]byte(str), &raw) if err != nil { panic(err) } parsed := make(map[string]interface{}, len(raw)) for key, val := range raw { s := string(val) i, err := strconv.ParseInt(s, 10, 64) if err == nil { parsed[key] = i continue } f, err := strconv.ParseFloat(s, 64) if err == nil { parsed[key] = f continue } var v interface{} err = json.Unmarshal(val, &v) if err == nil { parsed[key] = v continue } parsed[key] = val } for key, val := range parsed { fmt.Printf("%T: %v %v\n", val, key, val) } }
Contoh: Menggunakan json.Number
Dayakan penggunaan json.Jenis nombor untuk penghuraian nombor, yang membenarkan pengendalian integer secara eksplisit nilai:
package main import ( "encoding/json" "fmt" "strings" ) func main() { str := `{"a":123,"b":12.3,"c":"123","d":"12.3","e":true}` var parsed map[string]interface{} d := json.NewDecoder(strings.NewReader(str)) d.UseNumber() err := d.Decode(&parsed) if err != nil { panic(err) } for key, val := range parsed { n, ok := val.(json.Number) if !ok { continue } if i, err := n.Int64(); err == nil { parsed[key] = i continue } if f, err := n.Float64(); err == nil { parsed[key] = f continue } } for key, val := range parsed { fmt.Printf("%T: %v %v\n", val, key, val) } }
Kedua-dua contoh ini berjaya menghuraikan nombor JSON sebagai integer atau terapung, seperti yang dikehendaki.
Atas ialah kandungan terperinci Bagaimana Menghuraikan Nombor JSON sebagai Integer atau Terapung dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!