Heim > Backend-Entwicklung > Golang > Wie kann ich nachgestellte Nullen beibehalten, wenn ich Floats in Go in JSON umwandele?

Wie kann ich nachgestellte Nullen beibehalten, wenn ich Floats in Go in JSON umwandele?

Susan Sarandon
Freigeben: 2024-11-28 08:21:12
Original
487 Leute haben es durchsucht

How Can I Preserve Trailing Zeros When Marshaling Floats to JSON in Go?

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
}
Nach dem Login kopieren

In dieser Implementierung:

  • Der KeepZero-Typ umschließt die Typ float64.
  • Die MarshalJSON()-Methode prüft, ob der Float eine Ganzzahl (ohne Dezimalteil) ist. Wenn dies der Fall ist, wird die Funktion strconv.FormatFloat() mit einer Genauigkeit von einer Dezimalstelle verwendet, um sicherzustellen, dass die nachgestellte Null erhalten bleibt.
  • Andernfalls wird eine Genauigkeit von -1 verwendet, um die Angabe einer festen Dezimalzahl zu vermeiden Orte.

Beispiel:

type Pt struct {
    Value KeepZero
    Unit  string
}

func main() {
    data, err := json.Marshal(Pt{40.0, "some_string"})
    fmt.Println(string(data), err)
}
Nach dem Login kopieren

Dies Beispiel erzeugt die gewünschte JSON-Ausgabe:

{"Value":40.0,"Unit":"some_string"}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage