JSON-Marshalling: Nachgestellte Nullen in Gleitkommazahlen beibehalten
Beim Serialisieren von Daten in JSON mit json.Marshal() in Go, Nachstellen Nullen in Gleitkommazahlen werden oft entfernt. Dies kann problematisch sein, wenn die empfangende Seite Gleitkommawerte mit Dezimalstellen erwartet.
Lösung: Benutzerdefinierte Marshal-Funktion
Eine effektive Möglichkeit, json.Marshal() zu verhindern Das Entfernen der nachgestellten Nullen besteht darin, eine benutzerdefinierte MarshalJSON()-Methode für den Typ zu definieren, der den Gleitkommawert enthält. Dadurch können Sie den Serialisierungsprozess manuell steuern.
Betrachten Sie das folgende Beispiel:
type MyFloat float64 func (f MyFloat) MarshalJSON() ([]byte, error) { // Check if the float is an integer (no decimal part). if math.Trunc(float64(f)) == float64(f) { // Serialize as an integer without the trailing zero. return []byte(strconv.FormatInt(int64(f), 10)), nil } // Serialize as a floating-point number with the trailing zero. return []byte(strconv.FormatFloat(float64(f), 'f', -1, 64)), nil }
In diesem Beispiel definiert der MyFloat-Typ eine benutzerdefinierte MarshalJSON()-Methode, die prüft, ob der Float vorhanden ist eine Ganzzahl (kein Dezimalteil) und serialisiert sie entsprechend. Bei Gleitkommazahlen werden diese mit intakter abschließender Null serialisiert.
Verwendung:
Sobald Sie die benutzerdefinierte MarshalJSON()-Methode definiert haben, können Sie sie verwenden um Objekte zu serialisieren, die den MyFloat-Typ enthalten. Zum Beispiel:
type MyStruct struct { Value MyFloat Unit string } // Serialize MyStruct using the custom MarshalJSON method. data, err := json.Marshal(MyStruct{40.0, "some_string"})
Dies führt zu der folgenden JSON-Ausgabe:
{ "Value": 40.0, "Unit": "some_string" }
Hinweis:
Das obige ist der detaillierte Inhalt vonWie kann ich nachgestellte Nullen beim JSON-Marshalling von Gleitkommazahlen in Go beibehalten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!