JSON unmarshal float类型怎么保持JSON一样的数据

有如下的JSON数据:

{
  "a": 0.000,
  "b": 0.000
}

实际上经过JSON.Unmarshal之后我们输出的话会变成0.如果保持一模一样的保留三位数?

type Record map[string]interface{}

func main() {
    var record Record
    err := json.Unmarshal([]byte(d), &record)
    if err != nil {
        fmt.Println("json.Unmarshal:", err)
        return
    }
    fmt.Println(record)
}
已邀请:

lrita

赞同来自: RedMothball

package main

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

type Record struct {
    A json.Number `json:"a"`
    B json.Number `json:"b"`
}

func main() {
    var (
        data   = `{ "a": 0.000, "b": 0.000 }`
        record Record
    )

    dec := json.NewDecoder(strings.NewReader(data))
    dec.UseNumber()

    if err := dec.Decode(&record); err != nil {
        fmt.Println(err)
        return
    }
    fmt.Printf("a(%s) b(%s)\n", record.A, record.B)
    _, _ = record.A.Float64() // assign
}

songtianyi

赞同来自:

和C一样

package main

import (
    "fmt"
)

func main() {
    f1 := float64(0)
    f2 := float64(0.000)
    f3 := float64(0.00)
    fmt.Printf("%0.3f\n", f1)
    fmt.Printf("%0.3f\n", f2)
    fmt.Printf("%0.3f\n", f3)
}

afocus

赞同来自:

type Record map[string]interface{}

var jsonstr = `
{
    "a": 0.000,
    "b": 0.000
}
`

func main() {
    var record Record
    dec := json.NewDecoder(strings.NewReader(jsonstr))
    dec.UseNumber()
    dec.Decode(&record)
    fmt.Println(record)
}

要回复问题请先登录注册