Heim >Backend-Entwicklung >Golang >Wie bleiben Int64-Werte beim Parsen von JSON in Go erhalten?

Wie bleiben Int64-Werte beim Parsen von JSON in Go erhalten?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-14 16:36:18554Durchsuche

How to Preserve Int64 Values When Parsing JSON in Go?

Int64-Werte beim Parsen von JSON in Go beibehalten

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn