JSON Marshal und Float-Nullen nachgestellt
Problem:
Beim Marshalling von Float-Zahlen an JSON Bei Verwendung von json.Marshal() werden die nachgestellten Nullen entfernt, was möglicherweise zu Problemen beim Parsen des JSON mit externen Elementen führt Programme.
Lösung:
Um die nachgestellten Nullen in der JSON-Ausgabe beizubehalten, besteht ein Ansatz darin, einen benutzerdefinierten Float-Typ zu definieren und eine benutzerdefinierte MarshalJSON()-Methode für bereitzustellen it.
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 dieser Implementierung:
Beispiel:
type Pt struct { Value KeepZero Unit string } func main() { data, err := json.Marshal(Pt{40.0, "some_string"}) fmt.Println(string(data), err) }
Dies Beispiel erzeugt die gewünschte JSON-Ausgabe:
{"Value":40.0,"Unit":"some_string"}
Das obige ist der detaillierte Inhalt vonWie kann ich nachgestellte Nullen beibehalten, wenn ich Floats in Go in JSON umwandele?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!