将 API 请求拉入嵌套结构

我目前正在将 API 响应提取到结构中。


我可以正常回答说:


  [ 

    {"date":"2021-10-04","user":"Test","url":"Anonymous"]},

    {"date":"2021-10-04","user":"Test","url":"Anonymous"]},

    {"date":"2021-10-04","user":"Test","url":"Anonymous"]},

  ]

但是当我得到这样的数据时:


  "urls": [

    {"date":"2021-10-04","user":"Test","url":"Anonymous"]},

    {"date":"2021-10-04","user":"Test","url":"Anonymous"]},

    {"date":"2021-10-04","user":"Test","url":"Anonymous"]},

  ]

我似乎无法将它解析为结构。


这似乎是一个愚蠢的问题,因为它基本上是一样的。


这是我在做什么:


   type urls struct {

    Urls struct {

        Date   string `json:"date"`

        User   string `json:"user"`

        Urls   string `json:"urls"`

    } `json:"urls"`

   }


   type url []urls

在函数中:


   resp, err := http.Get("https://url")

   if err != nil {

        fmt.Println("No response from request")

   }

   defer resp.Body.Close()

   body, err := ioutil.ReadAll(resp.Body) // response body is []byte

   var u url

   _ = json.Unmarshal(body, &u)

不幸的是,这不起作用,你是空的。


通过第一个响应,我可以有一个这样的结构并且它工作正常:


  type urls struct {

       Date   string `json:"date"`

       User   string `json:"user"`

       Urls   string `json:"urls"`

  }


梵蒂冈之花
浏览 65回答 1
1回答

慕桂英4014372

我想我想说的是上述内容的结合,再加上我的一点经验。您的 Urls 字段是 JSON 中的一个数组,但不在您声明的结构中。您不应忽略 json.Unmarshal(body, &u) 返回的错误。您发布的 Json 在语法上不正确。我稍微修改了你的 Json 字符串,它可能是:{"urls": [     {"date":"2021-10-04","user":"Test","url":"Anonymous"},     {"date":"2021-10-04","user":"Test","url":"Anonymous"},     {"date":"2021-10-04","user":"Test","url":"Anonymous"}   ] }Go 结构应该是:type URL struct {     SubURLs []struct {         Date string `json:"date"`         User string `json:"user"`         URL  string `json:"url"`     } `json:"urls"`}接下来给大家介绍一种在处理JSON to Go structs时可能的方法: 你可以把你的Json贴在这个网站上,然后你就可以得到它对应的Go结构体,你也可以顺便修正你的Json。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go