Bei der Verarbeitung von JSON-POST-Anfragen, die Arrays von Objekten mit int64-Werten enthalten, treten häufig Konvertierungsprobleme auf. JSON.Unmarshal konvertiert diese Werte automatisch in float64, was unpraktisch sein kann. In diesem Artikel werden Lösungen zum Erhalt der ursprünglichen int64-Werte untersucht.
Lösung 1: Verwenden des Zahlentyps
Der Typ json.Decoder enthält eine UseNumber-Methode, mit der Sie Zahlen dekodieren können in einen benutzerdefinierten Typ umwandeln. Durch Definieren eines Zahlentyps, der ein JSON-Zahlenliteral darstellt, können Sie es einfach wieder in int64 konvertieren:
func main() { body := []byte("{\"tags\":[{\"id\":4418489049307132905},{\"id\":4418489049307132906}]}") var dat map[string]interface{} d := json.NewDecoder(bytes.NewBuffer(body)) d.UseNumber() if err := d.Decode(&dat); err != nil { panic(err) } // ... n := tags[0].(map[string]interface{})["id"].(json.Number) i64, _ := strconv.ParseUint(string(n), 10, 64) }
Lösung 2: Dekodierung in benutzerdefinierte Struktur
Sie kann auch direkt in eine spezifische, auf Sie zugeschnittene Struktur dekodieren Daten:
type A struct { Tags []map[string]uint64 } func main() { body := []byte("{\"tags\":[{\"id\":4418489049307132905},{\"id\":4418489049307132906}]}") var a A if err := json.Unmarshal(body, &a); err != nil { panic(err) } // ... println(a.Tags[0]["id"]) }
Achtung:
Beachten Sie, dass bei der Interaktion Ihrer Anwendung mit JavaScript, das nur IEEE754-Floats mit doppelter Genauigkeit unterstützt, Probleme beim Parsen von int64-Werten auftreten können .
Das obige ist der detaillierte Inhalt vonWie bleiben Int64-Werte beim Parsen von JSON in Go erhalten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!