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.
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 }
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!