Heim > Backend-Entwicklung > Golang > Wie bleiben nachgestellte Nullen in der JSON-Ausgabe für die Gleitkommazahlen von Go erhalten?

Wie bleiben nachgestellte Nullen in der JSON-Ausgabe für die Gleitkommazahlen von Go erhalten?

DDD
Freigeben: 2024-11-28 11:56:14
Original
474 Leute haben es durchsucht

How to Preserve Trailing Zeros in JSON Output for Go's Floating-Point Numbers?

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

In diesem Code:

  • Der KeepZero-Typ ist ein neuer Gleitkommatyp, der den nativen float64-Typ umschließt.
  • Die MarshalJSON-Methode implementiert die json.Marshaler-Schnittstelle für den KeepZero-Typ.
  • Die Die Funktion strconv.FormatFloat wird verwendet, um die Gleitkommazahl als Zeichenfolge zu formatieren. Wenn es sich bei der Zahl um eine ganze Zahl handelt (d. h. sie hat keinen Bruchteil), wird die Zeichenfolge mit einer einzelnen Dezimalstelle formatiert, um die nachgestellte Null beizubehalten. Andernfalls wird die Zeichenfolge ohne festen Dezimalpunkt formatiert.

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

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

Dadurch wird die folgende JSON-Ausgabe erzeugt:

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

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!

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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage