Rumah > pembangunan bahagian belakang > Golang > Bagaimana Menghuraikan Nombor JSON sebagai Integer atau Terapung dalam Go?

Bagaimana Menghuraikan Nombor JSON sebagai Integer atau Terapung dalam Go?

Mary-Kate Olsen
Lepaskan: 2024-11-21 00:21:12
asal
702 orang telah melayarinya

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

Menghuraikan Integer JSON sebagai Integer dalam Go

Dalam pakej pengekodan/json Go, semua nombor semasa penghuraian JSON ditafsirkan sebagai terapung secara lalai. Walau bagaimanapun, untuk membezakan dengan tepat antara integer dan terapung semasa menghuraikan data JSON, pertimbangkan pendekatan berikut:

Contoh: Menggunakan Nilai JSON Tersuai

Gunakan json.RawMessage dan strconv untuk menghuraikan nombor sebagai int dan terapung, sambil menganggap nilai lain sebagai ialah:

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)
    }
}
Salin selepas log masuk

Contoh: Menggunakan json.Number

Dayakan penggunaan json.Jenis nombor untuk penghuraian nombor, yang membenarkan pengendalian integer secara eksplisit nilai:

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)
    }
}
Salin selepas log masuk

Kedua-dua contoh ini berjaya menghuraikan nombor JSON sebagai integer atau terapung, seperti yang dikehendaki.

Atas ialah kandungan terperinci Bagaimana Menghuraikan Nombor JSON sebagai Integer atau Terapung dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan