2015-03-04 2 views
0

Я новичок, и я пытаюсь написать простое приложение, чтобы вытащить некоторые школьные данные из greatschools.org. Данные JSON выглядит следующим образом:Невозможно десериализовать данные json в structs

{ 
    "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: не может распаковать объект в значение Go типа [] main.SchoolStruct "

Я использую библиотеку gopencils для выполнения своих запросов и успешно использовал ее с очень простыми запросами. Вы видите, что я могу делать неправильно?

ответ

3

Есть несколько проблем. Для начала вы пытаетесь расшифровать школу, но данные - это школы, в которых есть член (массив) школы.

Другой вопрос: у вас есть несоответствующие имена. GsId! = gsid, если вы не сообщите об этом, используя теги struct.

Попробуйте декодирования в 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"` 
} 
+2

Параметр/пакет JSON кодирования будет распаковать 'lowercase' поля в' Uppercase' для вас, если нет никакой двусмысленности, но лучше не полагаться на такое поведение. – JimB

+0

Фантастический! Теперь имеет смысл. Спасибо! – RockyMountainHigh

Смежные вопросы