【问题标题】:Server does't get all the JSON from remote REST API服务器没有从远程 REST API 获取所有 JSON
【发布时间】:2020-04-19 02:46:44
【问题描述】:

我的 Go 服务器没有从远程 API 检索所有 JSON 数据

我什至尝试创建自定义 http.Client 来发出请求...但它仍然不会检索 ALL JSON 数据,甚至尝试延长各自的超时时间

这是我的代码:

var netTransport = &http.Transport{
        Dial: (&net.Dialer{
            Timeout: 50 * time.Second,
        }).Dial,
        TLSHandshakeTimeout: 50 * time.Second,
    }
    var netClient = &http.Client{
        Timeout:   time.Second * 40,
        Transport: netTransport,
    }
    res, getErr := netClient.Get(url)

    if getErr != nil {
        log.Fatal(getErr)
    }
    data := JSONData{}
    if err := json.NewDecoder(res.Body).Decode(&data); err != nil {
        log.Fatal(err)
    }
    data.Username = user
    fmt.Println(data)

JSONData定义如下:

type Owner struct {
    Login string
}

// Item is the single repository data structure
type Item struct {
    ID          int
    Name        string
    FullName    string `json:"full_name"`
    Owner       Owner
    Description string
    CreatedAt   string `json:"created_at"`
}

// JSONData contains the GitHub API response
type JSONData struct {
    Count    int `json:"total_count"`
    Username string
    Items    []Item
}

【问题讨论】:

标签: json api http go server


【解决方案1】:

JSONData 需要定义 JSON 标签。

type Owner struct {
    Login string `json:"login"`
}

// Item is the single repository data structure
type Item struct {
    ID          int    `json:"id"`
    Name        string `json:"name"`
    FullName    string `json:"full_name"`
    Owner       Owner  `json:"owner"`
    Description string `json:"description"`
    CreatedAt   string `json:"created_at"`
}

// JSONData contains the GitHub API response
type JSONData struct {
    Count    int    `json:"total_count"`
    Username string `json:"username"`
    Items    []Item `json:"items"`
}

如果没有指定标签,则按原样命名:

type Owner struct {
  Login string
}

这将被编组(并相应地解组)为类似的:

{"Login": "some login"}

【讨论】:

  • 不,它们实际上并不...您只需要为相应的 json 密钥不同的人这样做,例如 FulllName 和“full_name”...这需要与一个 JSON 标签……Peter 已经在上面的评论中给了我我需要的解决方案……这不是我的代码,而是来自 GitHub 的行为……但是感谢您抽出宝贵时间回答我的问题!!! ?
  • 你是对的。我试图解组,令我惊讶的是,它奏效了。谢谢你指出这一点,这对我来说是个新闻。尽管如此,我认为将标签保留在那里通常是好的,原因有两个。首先,您固定 JSON 字段名称,即使名称更改。其次,不带标签的编组将导致首字母大写。 play.golang.org/p/YoZc3yViw-C
  • 是的,这是真的……谢谢?
猜你喜欢
  • 2015-06-28
  • 1970-01-01
  • 1970-01-01
  • 2013-05-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多