Golang Json Unmarshal Numeric with Exponent
Beim Unmarshaling einer JSON-Zeichenfolge in eine Struktur in Golang werden numerische Werte mit Exponenten oft als 0 interpretiert . Dies kann eine Herausforderung sein, da Exponenten ein Standardbestandteil der JSON-Spezifikation sind.
Um dieses Problem zu beheben, muss der Typ des numerischen Felds entweder in float32 oder float64 geändert werden. Diese Gleitkommatypen unterstützen die Darstellung von Exponenten. Beispiel:
type Person struct { Id float64 `json:"id"` _Id int64 Name string `json:"name"` }
Nach dem Ändern des Typs wird durch das Unmarshaling der JSON-Zeichenfolge in der Struktur der numerische Wert korrekt mit dem Exponenten analysiert.
Alternativer Ansatz mit einer Hilfsfunktion
Wenn das numerische Feld eine Ganzzahl sein muss, können Sie eine Hilfsfunktion verwenden, um den Gleitkommawert nach dem Unmarshaling in den Ganzzahltyp umzuwandeln:
import ( "encoding/json" "fmt" "math" "os" "reflect" ) type Person struct { Id float64 `json:"id"` _Id int64 Name string `json:"name"` } var f Person var b = []byte(`{"id": 1.2e+8, "Name": "Fernando"}`) func main() { _ = json.Unmarshal(b, &f) if reflect.TypeOf(f._Id) == reflect.TypeOf((int64)(0)) { fmt.Println(math.Trunc(f.Id)) f._Id = int64(f.Id) } }
Hier Beispielsweise kürzt die Hilfsfunktion math.Trunc den Gleitkommawert auf eine Ganzzahl. Der gekürzte Wert wird dann dem Feld _Id zugewiesen.
Das obige ist der detaillierte Inhalt vonWie entmarshaliere ich numerische JSON-Werte mit Exponenten in Golang?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!