Heim > Backend-Entwicklung > Golang > Wie kann ich nachgestellte Nullen beim JSON-Marshalling von Gleitkommazahlen in Go beibehalten?

Wie kann ich nachgestellte Nullen beim JSON-Marshalling von Gleitkommazahlen in Go beibehalten?

Linda Hamilton
Freigeben: 2024-11-27 20:19:10
Original
837 Leute haben es durchsucht

How Can I Preserve Trailing Zeroes in Go's JSON Marshaling of Floating-Point Numbers?

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

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

Dies führt zu der folgenden JSON-Ausgabe:

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

Hinweis:

  • Der benutzerdefinierte MarshalJSON ()-Methode muss für den Typ definiert werden, der serialisiert werden soll.
  • Wenn der Float eine Ganzzahl darstellt (kein Dezimalteil), Sie können die Verwendung eines Integer-Typs anstelle eines Float-Typs in Betracht ziehen, um Mehrdeutigkeiten zu vermeiden.

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!

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