我的目标是读取JSON文件。尽管以下程序可以正常读取文件,但是id
字段值不正确。对于所有读取的对象,id
字段值为0
。
JSON文件内容示例:
{
"users" : [
{
"id" : "1",
"name" : "Matt Hayden"
},
{
"id" : "2",
"name" : "David Warner"
},
]
}
Golang中的JSON文件阅读器程序
type Schema struct {
Id int `json:"id"`
Name string `json:"name"`
}
func reader() {
fileName := "./input.json"
jsonFile, fileErr := os.Open(fileName)
if fileErr != nil {
_ = errors.Errorf("failed to open file %s : %v", fileName, fileErr)
}
defer jsonFile.Close()
bytesRead, readErr := ioutil.ReadAll(jsonFile)
if readErr != nil {
_ = errors.Errorf("failed to read json file %s : %v", fileName, readErr)
}
var sch Schema
unMarshalErr := json.Unmarshal(bytesRead, &sch)
if unMarshalErr != nil {
_ = errors.Errorf("failed to unmarshal JSON bytes : %v", unMarshalErr)
}
fmt.Printf("%+v", sch)
}
实际输出:
{Users:[{Id:0 Name:Matt Hayden} {Id:0 Name:David Warner}]}
预期产量:
{Users:[{Id:1 Name:Matt Hayden} {Id:2 Name:David Warner}]}
最佳答案
您可以在JSON结构标签中添加其他类型。看一下编码(marshal)的文档here。
示例:https://play.golang.org/p/VqZu9SrnpW4
package main
import (
"encoding/json"
"fmt"
"reflect"
)
type Response struct {
Users []User `json:"users"`
}
type User struct {
ID int `json:"id,string"`
Name string `json:"name"`
}
func main() {
r := &Response{}
err := json.Unmarshal([]byte(`{
"users" : [
{
"id" : "1",
"name" : "Matt Hayden"
},
{
"id" : "2",
"name" : "David Warner"
}
]
}`), &r)
if err != nil {
panic(err)
}
fmt.Printf("%#v \n", r)
fmt.Printf("Type of ID is %s \n", reflect.TypeOf(r.Users[0].ID)) // int
}
关于json - 无法从JSON解码int字段,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59709188/