Heim  >  Artikel  >  Backend-Entwicklung  >  Wie analysiere ich JSON-Zahlen als Ganzzahlen oder Gleitkommazahlen in Go?

Wie analysiere ich JSON-Zahlen als Ganzzahlen oder Gleitkommazahlen in Go?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-21 00:21:12636Durchsuche

How to Parse JSON Numbers as Integers or Floats in Go?

JSON-Ganzzahlen als Ganzzahlen in Go analysieren

Im Paket „encoding/json“ von Go werden alle Zahlen während der JSON-Analyse standardmäßig als Gleitkommazahlen interpretiert. Um jedoch beim Parsen von JSON-Daten genau zwischen Ganzzahlen und Gleitkommazahlen zu unterscheiden, sollten Sie die folgenden Ansätze in Betracht ziehen:

Beispiel: Verwenden benutzerdefinierter JSON-Werte

Verwenden Sie json.RawMessage und strconv to Analysieren Sie Zahlen als Ints und Floats, während andere Werte als behandelt werden lautet:

package main

import (
    "encoding/json"
    "fmt"
    "strconv"
)

func main() {
    str := `{"a":123,"b":12.3,"c":"123","d":"12.3","e":true}`
    var raw map[string]json.RawMessage
    err := json.Unmarshal([]byte(str), &raw)
    if err != nil {
        panic(err)
    }
    parsed := make(map[string]interface{}, len(raw))
    for key, val := range raw {
        s := string(val)
        i, err := strconv.ParseInt(s, 10, 64)
        if err == nil {
            parsed[key] = i
            continue
        }
        f, err := strconv.ParseFloat(s, 64)
        if err == nil {
            parsed[key] = f
            continue
        }
        var v interface{}
        err = json.Unmarshal(val, &v)
        if err == nil {
            parsed[key] = v
            continue
        }
        parsed[key] = val
    }
    for key, val := range parsed {
        fmt.Printf("%T: %v %v\n", val, key, val)
    }
}

Beispiel: Verwendung von json.Number

Aktivieren Sie die Verwendung des Typs json.Number für die Zahlenanalyse, was die explizite Verarbeitung von Ganzzahlen ermöglicht Werte:

package main

import (
    "encoding/json"
    "fmt"
    "strings"
)

func main() {
    str := `{"a":123,"b":12.3,"c":"123","d":"12.3","e":true}`
    var parsed map[string]interface{}
    d := json.NewDecoder(strings.NewReader(str))
    d.UseNumber()
    err := d.Decode(&parsed)
    if err != nil {
        panic(err)
    }
    for key, val := range parsed {
        n, ok := val.(json.Number)
        if !ok {
            continue
        }
        if i, err := n.Int64(); err == nil {
            parsed[key] = i
            continue
        }
        if f, err := n.Float64(); err == nil {
            parsed[key] = f
            continue
        }
    }
    for key, val := range parsed {
        fmt.Printf("%T: %v %v\n", val, key, val)
    }
}

In beiden Beispielen werden JSON-Zahlen erfolgreich als Ganzzahlen oder Gleitkommazahlen analysiert gewünscht.

Das obige ist der detaillierte Inhalt vonWie analysiere ich JSON-Zahlen als Ganzzahlen oder Gleitkommazahlen in Go?. 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