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
DDDOriginal
2024-11-28 11:56:14532Durchsuche

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
}

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
}

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!

Stellungnahme:
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