有时会有这种需求,将一个json数据形如:
{"x":"golang", "y":"520.1314"}
中的y反序列化为浮点类型,如果这样写:
package main
import (
"encoding/json"
"fmt"
)
type JsonTest struct {
X string `json:"x"`
Y float64 `json:"y"`
}
func main() {
s := `{"x":"golang", "y":"520.1314"}`
var jt JsonTest
err := json.Unmarshal([]byte(s), &jt)
if err == nil {
fmt.Printf("%+v\n", jt)
} else {
fmt.Println(err)
fmt.Printf("%+v\n", jt)
}
}
会报错:
json: cannot unmarshal string into Go struct field JsonTest.y of type float64
将结构体JsonTest定义改为如下,即可解决战斗:
type JsonTest struct {
X string `json:"x"`
Y float64 `json:"y,string"`
}
这样写可以告诉golang的json解释器变量y是被编码成字符串的浮点数
本文转载详细内容:
作者:wu_sphinx
链接:http://www.jianshu.com/p/9856478555c5
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。