json - 无法将 json 数据反序列化为结构

标签 json struct go deserialization

我是一个新手,正在尝试编写一个简单的应用程序来从 greatschools.org 中提取一些学校数据。 json 数据如下所示:

{
    "schools": {
        "school": [
            {
                "gsId": 1,
                "name": "Catholic School",
                "type": "private",
                "gradeRange": "PK-9",
                "enrollment": 39,
                "parentRating": 4,
                "city": "Denver",
                "state": "CO",
                "address": "111 Main St., \nDenver, CO  80100",
                "phone": "(720) 555-1212",
                "fax": "(720) 555-1212",
                "website": "http://www.myschool.org",
                "ncesId": "1234567",
                "lat": 30.519446,
                "lon": -105.71314,
                "overviewLink": "http://www.greatschools.org/colorado/Denver/1-Catholic-School/?s_cid=gsapi",
                "ratingsLink": "http://www.greatschools.org/school/rating.page?state=CO&id=1&s_cid=gsapi",
                "reviewsLink": "http://www.greatschools.org/school/parentReviews.page?state=CO&id=1&s_cid=gsapi",
                "schoolStatsLink": "http://www.greatschools.org/cgi-bin/CO/otherprivate/1"
            }...

我的结构是这样的:

type SchoolStruct struct {
    GsId            int
    Name            string
    SchoolType      string
    GradeRange      string
    Enrollment      int
    ParentRating    int
    City            string
    State           string
    Address         string
    Phone           string
    Fax             string
    Website         string
    NcesId          string
    Lat             float64
    Lon             float64
    OverviewLink    string
    RatingsLink     string
    ReviewsLink     string
    SchoolStatsLink string
}

type SchoolsStruct struct {
    Schools []SchoolStruct
}

当我运行我的代码时,我得到“json:无法将对象解码为 []main.SchoolStruct 类型的 Go 值”

我正在使用 gopencils 库来发出我的请求,并且已经成功地使用它处理了非常简单的请求。你知道我可能做错了什么吗?

最佳答案

有几个问题。对于初学者,您正在尝试解码一所学校,但数据是学校,其中有一个学校成员(数组)。

另一个问题是您的名称不匹配。 GsId != gsid 除非你使用结构标签告诉 Go。

改为尝试解码为 SchoolResponseData:

type SchoolResponseData struct {
    Schools struct {
        School []struct {
            Address         string  `json:"address"`
            City            string  `json:"city"`
            Enrollment      float64 `json:"enrollment"`
            Fax             string  `json:"fax"`
            GradeRange      string  `json:"gradeRange"`
            GsId            float64 `json:"gsId"`
            Lat             float64 `json:"lat"`
            Lon             float64 `json:"lon"`
            Name            string  `json:"name"`
            NcesId          string  `json:"ncesId"`
            OverviewLink    string  `json:"overviewLink"`
            ParentRating    float64 `json:"parentRating"`
            Phone           string  `json:"phone"`
            RatingsLink     string  `json:"ratingsLink"`
            ReviewsLink     string  `json:"reviewsLink"`
            SchoolStatsLink string  `json:"schoolStatsLink"`
            State           string  `json:"state"`
            Type            string  `json:"type"`
            Website         string  `json:"website"`
        } `json:"school"`
    } `json:"schools"`
}

关于json - 无法将 json 数据反序列化为结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28865899/

相关文章:

java - 将表情符号存储在 MySQL 中出现不正确的字符串值错误

javascript - 从rest api动态拉动dojo组合框选项

c# - 显式结构布局上的未分配字段

戈朗 : How to change struct field value in slice of interfaces

go - 在 Windows 上输出转义序列

json - 浏览器想要从 Controller 返回 Json 时将 Json 作为文件下载

java - 如何使用 GSON 在对象中插入许多 JSON 属性

C - 带有函数指针的结构体,如何修复 "variable number of arguments"警告?

go - 是否可以在golang中创建进程池

json - 如何告诉客户端他们需要从 Go 服务器发送整数而不是字符串?