Heim >Backend-Entwicklung >Golang >Wie kann ich JSON-Ganzzahlen in Golang als Ganzzahlen und nicht als Gleitkommazahlen analysieren?

Wie kann ich JSON-Ganzzahlen in Golang als Ganzzahlen und nicht als Gleitkommazahlen analysieren?

Linda Hamilton
Linda HamiltonOriginal
2024-11-17 02:24:03251Durchsuche

How Can I Parse JSON Integers as Integers, Not Floats, in Golang?

Parsen von JSON-Ganzzahlen als Ganzzahlen, nicht als Gleitkommazahlen in Golang

In Golang ist das Parsen von JSON-Ganzzahlwerten als Gleitkommazahlen ein häufiges Problem. Das Standardpaket „encoding/json“ unterscheidet nicht zwischen Ganzzahl- und Gleitkommazahlen, was zu Datentypkonflikten und Schreibfehlern bei der Interaktion mit Datenbanken führt. Um dieses Problem anzugehen, können wir alternative Ansätze zum Parsen von JSON-Werten verwenden.

Benutzerdefinierte JSON-Werte für Zahlentypen

Eine Lösung besteht darin, den allgemeinen Go-Mechanismus zu verwenden für benutzerdefinierte JSON-Werte. Durch die Implementierung eines benutzerdefinierten JSON-Typs, der zwischen Ganzzahlen und Gleitkommazahlen unterscheidet, können wir den Datentypkonvertierungsprozess steuern. Eine Beispielimplementierung ist unten dargestellt:

type MyInt int64

func (mi MyInt) MarshalJSON() ([]byte, error) {
    return []byte(strconv.FormatInt(int64(mi), 10)), nil
}

Dieser benutzerdefinierte Typ wandelt Ganzzahlwerte in Zeichenfolgen um, wenn sie in JSON gemarshallt werden. Um JSON-Werte in benutzerdefinierte Typen zu entpacken, können wir eine json.Unmarshal-Funktion verwenden:

var raw map[string]interface{}
err := json.Unmarshal([]byte(str), &raw)
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] = MyInt(i)
        continue
    }

    // Handle other types as needed
}

Verwenden des json.Number-Typs

Ein anderer Ansatz beinhaltet die Verwendung von json.Number, einem Typ, der JSON-Nummern darstellt. Es bietet Methoden zum Konvertieren der Zahl in int64- und float64-Werte, sodass wir die Typkonvertierung manuell durchführen können:

var parsed map[string]interface{}
d := json.NewDecoder(strings.NewReader(str))
d.UseNumber()
err := d.Decode(&parsed)
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
    }
}

Das obige ist der detaillierte Inhalt vonWie kann ich JSON-Ganzzahlen in Golang als Ganzzahlen und nicht als Gleitkommazahlen analysieren?. 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