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
Mary-Kate Olsenasal
2024-11-21 00:21:12711semak imbas

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

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

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!

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