带有 Go Parse Json 响应的 Api 请求

编写我的第一个 Go 应用程序我正在学习进行基本的 api 调用并解析 json 响应。我很确定我没有正确投射我的类型,我的回应是


false

  0

 0


  0

 0 false

 0

如果我创建一些包含数据的数组,我可以获得该响应,但是当我将这个更复杂的 json 响应添加到混合中时,事情会变得更加混乱,这让我非常肯定我没有正确投射。


这是我在玩弄并更改内容以破坏内容并尝试解决问题之后的当前代码。


package main


import (

    "encoding/json"

    "fmt"

    "io/ioutil"

    "net/http"

    type Payload struct {

        results Data 

}


    type Data struct {

        poster_path string

        adult bool

        overview string

        release_date string

        genre_ids int

        id int

        original_title string

        original_language string

        title string

        backdrop_path string

        popularity float64

        vote_count int

        video bool

        vote_average float64

}



type poster_path map[string]string

type adult map[string]bool

type overview map[string]string

type release_date map[string]string

type genre_ids map[string]int

type id map[string]int

type original_title map[string]string

type original_language map[string]string

type title map[string]string

type backdrop_path map[string]string

type popularity map[string]float64

type vote_count map[string]int

type video map[string]bool

type vote_average map[string]float64


func main() {

      // http://image.tmdb.org/t/p/w185

      url := "https://api.themoviedb.org/3/movie/top_rated?api_key=####APIKEYHERE######"

      res, err := http.Get(url)

      if err != nil {

        panic(err)

      }

      defer res.Body.Close()


      body, err := ioutil.ReadAll(res.Body)

      if err != nil {

        panic(err)

      }

      var p Payload


      err = json.Unmarshal(body, &p)

      if err != nil {

        panic(err)

      }

}


一些让我印象深刻的事情,


当我尝试投射浮点数时,我对投射 from float32to感到困惑float64

慕侠2389804
浏览 126回答 2
2回答

肥皂起泡泡

是初学者常见的错误。由于语言设计,encoding/json包只能解组为导出的字段。从encoding/json包:要将 JSON 解组为结构,Unmarshal 将传入的对象键与 Marshal 使用的键(结构字段名称或其标签)进行匹配,更喜欢精确匹配,但也接受不区分大小写的匹配。 Unmarshal 只会设置结构的导出字段。要导出字段,只需使用名称的首字母大写。例如。:type Payload struct {    Results Data }代替type Payload struct {    results Data }

犯罪嫌疑人X

首先,您在 JSON]的末尾缺少一个右方括号results。其次,您没有根据收到的 JSON 来构建结构。最后,在处理 Unmarshal/marshaling 时,在结构中每个导出字段后使用 JSON 标记以帮助 Go 检测适当的字段(如果您根据Unmarshal/marshal 识别字段的方式命名字段,则不需要。type Payload struct {        Page    int        Results []Data }type Data struct {        PosterPath       string  `json:"poster_path"`        Adult            bool    `json:"adult"`        Overview         string  `json:"overview"`        ReleaseDate      string  `json:"release_date"`        GenreIds         []int   `json:"genre_ids"`        Id               int     `json:"id"`        OriginalTitle    string  `json:"original_title"`        OriginalLanguage string  `json:"original_language"`        Title            string  `json:"title"`        BackdropPath     string  `json:"backdrop_path"`        Popularity       float64 `json:"popularity"`        VoteCount        int     `json:"vote_count"`        Video            bool    `json:"video"`        VoteAverage      float64 `json:"vote_average"`}请注意,GenreIds也必须[]int匹配 JSON 数据。最好不要在 Go 中使用 CamelCase。见https://play.golang.org/p/VduPD9AY84
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go