Rumah > pembangunan bahagian belakang > Golang > Bagaimana untuk Menyahmarshalkan Nilai Angka JSON dengan Eksponen di Golang?

Bagaimana untuk Menyahmarshalkan Nilai Angka JSON dengan Eksponen di Golang?

Mary-Kate Olsen
Lepaskan: 2024-11-15 10:31:02
asal
1032 orang telah melayarinya

How to Unmarshal JSON Numeric Values with Exponents in Golang?

Golang Json Unmarshal Numeric with Exponent

Apabila menyahmarshaling rentetan JSON ke dalam struct dalam Golang, nilai angka dengan eksponen sering ditafsirkan sebagai 0 . Ini boleh menjadi satu cabaran, kerana eksponen adalah bahagian standard JSON spesifikasi.

Untuk menangani isu ini, jenis medan angka mesti diubah suai kepada float32 atau float64. Jenis titik terapung ini menyokong perwakilan eksponen. Contohnya:

type Person struct {
    Id    float64          `json:"id"`
    _Id   int64             
    Name  string           `json:"name"`
}
Salin selepas log masuk

Selepas menukar jenis, membuka rentetan JSON ke dalam struct akan menghuraikan nilai berangka dengan eksponen dengan betul.

Pendekatan Alternatif dengan Fungsi Pembantu

Jika anda memerlukan medan angka sebagai integer, anda boleh menggunakan pembantu fungsi untuk menghantar nilai titik terapung kepada jenis integer selepas unmarshaling:

import (
    "encoding/json"
    "fmt"
    "math"
    "os"
    "reflect"
)

type Person struct {
    Id    float64          `json:"id"`
    _Id   int64             
    Name  string           `json:"name"`
}

var f Person
var b = []byte(`{"id": 1.2e+8, "Name": "Fernando"}`)

func main() {
    _ = json.Unmarshal(b, &f)

    if reflect.TypeOf(f._Id) == reflect.TypeOf((int64)(0)) {
        fmt.Println(math.Trunc(f.Id))
        f._Id = int64(f.Id)
    }
}
Salin selepas log masuk

Dalam contoh ini, fungsi pembantu matematik.Trunc memotong nilai titik terapung kepada integer. Nilai yang dipotong kemudiannya diberikan kepada medan _Id.

Atas ialah kandungan terperinci Bagaimana untuk Menyahmarshalkan Nilai Angka JSON dengan Eksponen di Golang?. 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