Heim > Backend-Entwicklung > Golang > Wie kann die Int64-Präzision beim Parsen von JSON in Go erhalten bleiben?

Wie kann die Int64-Präzision beim Parsen von JSON in Go erhalten bleiben?

Mary-Kate Olsen
Freigeben: 2024-12-08 07:32:27
Original
217 Leute haben es durchsucht

How to Preserve Int64 Precision When Parsing JSON in Go?

Int64-Werte beim Parsen von JSON in Go beibehalten

Beim Parsen von JSON-Daten in Go konvertiert die Funktion json.Unmarshal häufig große Ganzzahlwerte in float64-Typen, die für die Aufrechterhaltung der Präzision problematisch sein können.

Lösung 1:

Um die ursprünglichen int64-Werte beizubehalten, verwenden Sie einen Decoder und die UseNumber-Option:

package main

import (
    "encoding/json"
    "fmt"
    "bytes"
    "strconv"
)

func main() {
    body := []byte("{\"tags\":[{\"id\":4418489049307132905},{\"id\":4418489049307132906}]}")
    d := json.NewDecoder(bytes.NewBuffer(body))

    // Enable number preservation
    d.UseNumber()

    var dat map[string]interface{}
    if err := d.Decode(&dat); err != nil {
        panic(err)
    }

    tags := dat["tags"].([]interface{})
    n := tags[0].(map[string]interface{})["id"].(json.Number)
    i64, _ := strconv.ParseUint(string(n), 10, 64)
    fmt.Println(i64) // prints 4418489049307132905
}
Nach dem Login kopieren

Lösung 2:

Alternativ können Sie die Daten auch direkt in benutzerdefinierte Daten dekodieren Struktur:

package main

import (
    "encoding/json"
    "fmt"
)

type A struct {
    Tags []map[string]uint64 // "tags"
}

func main() {
    body := []byte("{\"tags\":[{\"id\":4418489049307132905},{\"id\":4418489049307132906}]}")
    var a A
    if err := json.Unmarshal(body, &a); err != nil {
        panic(err)
    }

    fmt.Println(a.Tags[0]["id"]) // logs 4418489049307132905
}
Nach dem Login kopieren

Achtung:

Beachten Sie, dass der Zahlentyp von JavaScript IEEE754 Double Precision Float ist, was bedeutet, dass es keine 64-Bit-Ganzzahlen darstellen kann, ohne an Präzision zu verlieren.

Das obige ist der detaillierte Inhalt vonWie kann die Int64-Präzision beim Parsen von JSON in Go erhalten bleiben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage