Heim > Artikel > Backend-Entwicklung > Wie gehe ich mit Exponenten im JSON-Unmarshaling für numerische Werte in Go um?
Golang Json Unmarshal Numeric with Exponent
Beim Unmarshaling von JSON-Strings in Strukturen, die numerische Werte mit Exponenten enthalten, kann es vorkommen, dass der Exponent wird konsequent auf 0 gekürzt. Dieses Problem kann auftreten, wenn der Typ Ihres Strukturfelds nicht mit dem Datentyp in übereinstimmt das JSON.
Im bereitgestellten Beispiel ist das Id-Feld der Person-Struktur als uint64 definiert, was vorzeichenlose 64-Bit-Ganzzahlen darstellt. Der Wert im JSON-String ist jedoch eine Dezimalzahl in wissenschaftlicher Notation (1.2E 8).
Da Go eine Dezimalzahl mit einem Exponenten nicht automatisch in eine vorzeichenlose 64-Bit-Ganzzahl umwandeln kann, wird das Ergebnis auf gekürzt 0.
So lösen Sie das Problem
Um dieses Problem zu beheben Bei diesem Problem können Sie den Typ des Id-Felds so ändern, dass er mit dem Datentyp in der JSON-Zeichenfolge übereinstimmt. Da es sich in diesem Fall um eine Dezimalzahl handelt, können Sie float32 oder float64 verwenden:
type Person struct { Id float32 `json:"id"` Name string `json:"name"` }
Durch die Aktualisierung des Typs auf float32 oder float64 kann Go nun den numerischen Wert mit einem Exponenten korrekt interpretieren und zuweisen in das Id-Feld der Personenstruktur.
Wenn Sie alternativ den ursprünglichen Ganzzahltyp für Id beibehalten möchten, können Sie ein benutzerdefiniertes JSON verwenden Unmarshaler-Hook. Dieser Hook kann den Gleitkommawert in eine Ganzzahl umwandeln, bevor er dem Feld zugewiesen wird:
type Person struct { Id int64 `json:"id"` Name string `json:"name"` } func (p *Person) UnmarshalJSON(b []byte) error { type Alias Person var a Alias if err := json.Unmarshal(b, &a); err != nil { return err } // Convert the float64 Id to int64 p.Id = int64(a.Id) return nil }
Mit dem benutzerdefinierten Unmarshaler wird der numerische Wert mit einem Exponenten in der JSON-Zeichenfolge korrekt konvertiert und zugewiesen das ID-Feld der Personenstruktur.
Das obige ist der detaillierte Inhalt vonWie gehe ich mit Exponenten im JSON-Unmarshaling für numerische Werte in Go um?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!