Bagaimana Mengendalikan Nombor JSON dengan Eksponen dalam Go?

Susan Sarandon
Lepaskan: 2024-11-17 08:03:03
asal
274 orang telah melayarinya

How to Handle JSON Numerals with Exponents in Go?

Menyahkod Angka JSON dengan Eksponen dalam Go

Apabila menyahmarshaling data JSON ke dalam struktur Go, nilai angka dengan eksponen sering disalahtafsirkan sebagai sifar. Ini berlaku apabila medan sasaran dalam struktur diisytiharkan sebagai jenis integer.

Untuk menangani isu ini, ikut langkah berikut:

  1. Ubah suai Jenis Medan: Tukar jenis medan di mana nilai angka dengan eksponen akan disimpan daripada uint64 kepada float32 atau float64. Contohnya:
type Person struct {
    Id   float32  `json:"id"`
    Name string `json:"name"`
}
Salin selepas log masuk
  1. Nyahmarshal JSON: Lakukan operasi unmarshal seperti biasa menggunakan fungsi json.Unmarshal. Nilai angka dengan eksponen kini akan ditafsirkan dengan betul.

Berikut ialah contoh:

package main

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

type Person struct {
    Id   float32  `json:"id"`
    Name string `json:"name"`
}

func main() {

    // Create the JSON string.
    var b = []byte(`{"id": 1.2E+8, "Name": "Fernando"}`)

    // Unmarshal the JSON to a proper struct.
    var f Person
    json.Unmarshal(b, &f)

    // Print the person.
    fmt.Println(f)

    // Unmarshal the struct to JSON.
    result, _ := json.Marshal(f)

    // Print the JSON.
    os.Stdout.Write(result)
}
Salin selepas log masuk

Ini akan menghasilkan:

{1.2e+08 Fernando}
{"id":1.2e+08,"Name":"Fernando"}
Salin selepas log masuk

Pendekatan Alternatif:

Jika anda mesti menggunakan jenis integer untuk medan, anda boleh menggunakan medan "dummy" jenis float64 untuk menangkap nilai angka dengan eksponen. Kemudian, gunakan cangkuk untuk menghantar nilai kepada jenis integer sebenar.

Berikut ialah contoh:

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"}`)
_ = json.Unmarshal(b, &f)

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

Ini akan menghasilkan:

1.2e+08
{Name:Fernando Id:120000000}
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimana Mengendalikan Nombor JSON dengan Eksponen 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