亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何將 JSON 轉換為結構

如何將 JSON 轉換為結構

Go
qq_笑_17 2022-09-19 21:20:13
我調用了第三方 API,并得到了以下 JSON:{"amount":1.0282E+7}當我想轉換它時,我得到了一個錯誤:Blocjson:無法將號碼 1.0282E+7 取消到 Go 結構字段“中東帳戶到卡響應”類型 int64 的金額我想在Go中將此JSON轉換為以下結構:type Response struct {     Amount int64 `json:"amount"`     }
查看完整描述

3 回答

?
紫衣仙女

TA貢獻1839條經驗 獲得超15個贊

由于您沒有解釋您的確切期望結果,我們只能猜測。但是你有三種一般的方法:

  1. 取消封送至浮點型類型而不是整數類型。如果需要 int,您可以稍后轉換為 int。

  2. 取消對類型的封送,該類型保留了完整的 JSON 表示形式及其精度,并且可以根據需要轉換為 int 或浮點數。json.Number

  3. 使用自定義取消封口,它可以為您從浮點型轉換為 int 類型。

下面演示了這三個:

package main


import (

    "fmt"

    "encoding/json"

)


const input = `{"amount":1.0282E+7}`


type ResponseFloat struct {

    Amount float64 `json:"amount"`

}


type ResponseNumber struct {

    Amount json.Number `json:"amount"`

}


type ResponseCustom struct {

    Amount myCustomType `json:"amount"`

}


type myCustomType int64


func (c *myCustomType) UnmarshalJSON(p []byte) error {

    var f float64

    if err := json.Unmarshal(p, &f); err != nil {

        return err

    }

    *c = myCustomType(f)

    return nil

}


func main() {

    var x ResponseFloat

    var y ResponseNumber

    var z ResponseCustom

    

    if err := json.Unmarshal([]byte(input), &x); err != nil {

        panic(err)

    }

    if err := json.Unmarshal([]byte(input), &y); err != nil {

        panic(err)

    }

    if err := json.Unmarshal([]byte(input), &z); err != nil {

        panic(err)

    }

    fmt.Println(x.Amount)

    fmt.Println(y.Amount)

    fmt.Println(z.Amount)

}


查看完整回答
反對 回復 2022-09-19
?
拉風的咖菲貓

TA貢獻1995條經驗 獲得超2個贊

結構中的“數量”字段是 int64,但您嘗試從字符串解析的數字是 float(在科學記數法中)。

試試這個:

type Response struct {
    Amount float64 `json:"amount"`
    }



查看完整回答
反對 回復 2022-09-19
?
滄海一幻覺

TA貢獻1824條經驗 獲得超5個贊

按如下方式修改代碼:


package main


import (

    "encoding/json"

    "fmt"

)


func main() {


    var data = []byte(`{"amount":1.0282E+7}`)

    var res Response

    json.Unmarshal(data, &res)

    fmt.Println(res)


}


type Response struct {

    Amount float64 `json:"amount"`

}

輸出:


{1.0282e+07}


查看完整回答
反對 回復 2022-09-19
  • 3 回答
  • 0 關注
  • 136 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號