Beibehalten nachgestellter Nullen in der JSON-Ausgabe für Gleitkommazahlen
In Go wird die Funktion json.Marshal() häufig zum Serialisieren verwendet Datenstrukturen in das JSON-Format. Allerdings besteht die Tendenz, dass nachgestellte Nullen während des Konvertierungsprozesses aus Gleitkommazahlen entfernt werden. Dies kann ein Problem sein, wenn die konsumierende Anwendung erwartet, dass die Zahlen nachgestellte Nullen haben.
Um dieses Problem zu beheben, besteht ein Ansatz darin, einen benutzerdefinierten Gleitkommatyp zu erstellen, der die json.Marshaler-Schnittstelle implementiert. Dadurch können Sie definieren, wie der Typ in JSON serialisiert wird. Hier ist eine Beispielimplementierung:
type KeepZero float64 func (f KeepZero) MarshalJSON() ([]byte, error) { if float64(f) == float64(int(f)) { return []byte(strconv.FormatFloat(float64(f), 'f', 1, 32)), nil } return []byte(strconv.FormatFloat(float64(f), 'f', -1, 32)), nil }
In diesem Code:
Um den KeepZero-Typ zu verwenden, können Sie das ursprüngliche float64-Feld in Ihrer Datenstruktur durch ein KeepZero-Feld ersetzen. Beispiel:
type Pt struct { Value KeepZero Unit string }
Wenn Sie json.Marshal für ein Pt-Objekt aufrufen, wird das Wertfeld mit der benutzerdefinierten MarshalJSON-Methode serialisiert, wobei bei Bedarf die nachgestellte Null beibehalten wird.
data, err := json.Marshal(Pt{40.0, "some_string"}) fmt.Println(string(data), err)
Dadurch wird die folgende JSON-Ausgabe erzeugt:
{"Value":40.0,"Unit":"some_string"}
Mit dieser Lösung können Sie die nachgestellten Nullen in Ihrem Gleitkomma beibehalten Zahlen bei der Serialisierung in JSON, je nach Bedarf der nutzenden Anwendung.
Das obige ist der detaillierte Inhalt vonWie bleiben nachgestellte Nullen in der JSON-Ausgabe für die Gleitkommazahlen von Go erhalten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!