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
Susan SarandonOriginal
2024-11-28 08:21:12486Durchsuche

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
}

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)
}

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!

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