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

时间:2015-03-04 22:02:24

标签: 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库来发出请求,并使用非常简单的请求成功使用它。你看到我可能做错了吗?

1 个答案:

答案 0 :(得分:3)

有一些问题。对于初学者,你试图解码学校,但数据是学校,其中有一个学校成员(阵列)。

另一个问题是你的名字不匹配。 GsId!= gsid除非您使用struct标签告诉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"`
}
相关问题