Heim > Backend-Entwicklung > Golang > Wie kann die JSON-Ganzzahlgenauigkeit in Go beibehalten werden?

Wie kann die JSON-Ganzzahlgenauigkeit in Go beibehalten werden?

Patricia Arquette
Freigeben: 2024-12-20 10:01:11
Original
803 Leute haben es durchsucht

How to Preserve JSON Integer Precision in Go?

Navigieren mit der JSON-Zahlengenauigkeit in Go

Beim Parsen von JSON in Go werden Ganzzahlen, die größer als 32 Bit sind, vom Standard-JSON-Decoder möglicherweise automatisch in float64-Werte konvertiert. Dies stellt eine Herausforderung dar, wenn Sie die Genauigkeit solcher Ganzzahlen bewahren müssen.

Eine Lösung für dieses Problem besteht darin, einen benutzerdefinierten Decoder zu verwenden und die UseNumber-Methode zu verwenden. Dadurch können Sie Zahlen in einen json.Number-Typ dekodieren, der problemlos wieder in eine Ganzzahl umgewandelt werden kann.

package main

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

func main() {
    body := []byte("{\"tags\":[{\"id\":4418489049307132905},{\"id\":4418489049307132906}]}")
    dat := make(map[string]interface{})
    d := json.NewDecoder(bytes.NewBuffer(body))
    d.UseNumber()
    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

Alternativ können Sie eine benutzerdefinierte Datenstruktur entwerfen, die zu Ihrem JSON-Schema passt, das damit umgehen kann Ganzzahlen beliebiger Größe.

package main

import "encoding/json"
import "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

Bedenken Sie, dass Sie möglicherweise auf Daten stoßen, wenn Ihre Anwendung mit JavaScript kommuniziert, dem echte 64-Bit-Ganzzahlen fehlen Verlust beim Rangieren und Unmarshalling.

Das obige ist der detaillierte Inhalt vonWie kann die JSON-Ganzzahlgenauigkeit in Go beibehalten werden?. 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