将 JSON 整数解组为空接口会导致错误的类型断言

我有这个代码。我希望接口的类型断言为 int。但是,接口的类型改为 float64。谁能解释为什么会这样?以及规避它的最佳方法是什么。


package main


import (

    "fmt"

    "encoding/json"

)


type obj struct {

    X interface{}

}


func main() {

    var x int

    x = 5

    o := &obj {

        X: x,

    }

    b, _ := json.Marshal(o)

    var newObj obj

    json.Unmarshal(b, &newObj)

    if _, ok := newObj.X.(int); ok {

        fmt.Println("X is an int")

    } else if _, ok := newObj.X.(float64); ok {

        fmt.Println("X is a float64")

    } else {

        fmt.Println("This does not make any sense")

    }

}

此代码打印“X 是 float64”。您可以在那里运行代码https://play.golang.org/p/9L9unW8l3n


GCT1015
浏览 206回答 1
1回答

偶然的你

数字被编码为“Json 数字” Unmarshal 将 Json 数字解码为浮点数。从文档:元帅浮点、整数和数字值编码为 JSON 数字。解组为了将 JSON 解组为接口值,Unmarshal 将其中一项存储在接口值中:bool,对于 JSON 布尔值 float64,对于 JSON 数字字符串,对于 JSON 字符串 []interface{},对于 JSON 数组 map[string]interface{},对于 JSON 对象 nil 对于 JSON null
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go