Golang中如何帮助处理JSON响应数据的发布
Golang中如何帮助处理JSON响应数据的发布 urlapi = https://yandex.ru/safety/check 待检查网站 = likegodak.club 内容类型 = json
请帮忙,我无法将响应读取到 YndexResponseModel 结构中 我这样做对吗?
现在响应始终为 nil
func main() {
result := CheckYandex("likegodak.club")
if result != nil {
fmt.Println(result.Info, result.Url)
}
}
func CheckYandex(site string) (status *YndexResponseModel) {
type (
Threatstr struct {
Threat string
}
YndexResponseModel struct {
Info []Threatstr
Url string
}
)
var (
apiurl string = "https://yandex.ru/safety/check"
cl = &http.Client{Timeout: 15 * time.Second}
strformat = fmt.Sprintf(`{"url": "%s"}`, site)
jsonStr = []byte(strformat)
)
r, err := http.NewRequest("POST", apiurl, bytes.NewBuffer(jsonStr))
r.Header.Set("content-type", "application/json")
r.Close = true
resp, err := cl.Do(r)
checkerror(err)
defer resp.Body.Close()
err = json.NewDecoder(resp.Body).Decode(status)
return status
更多关于Golang中如何帮助处理JSON响应数据的发布的实战教程也可以访问 https://www.itying.com/category-94-b0.html
3 回复
请保持原始问题不变,并按您希望的方式回复。
更多关于Golang中如何帮助处理JSON响应数据的发布的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
如果你找到了解决方案,请在这里发布答案 🙂 也许其他人也遇到了类似的问题,你的解决方案可以帮助他们。
问题在于你声明了status作为返回值变量,但没有初始化它。在Go中,*YndexResponseModel类型的status默认值为nil,直接传递给json.Decoder.Decode()会导致解码失败。
以下是修正后的代码:
package main
import (
"bytes"
"encoding/json"
"fmt"
"net/http"
"time"
)
type Threatstr struct {
Threat string `json:"threat"`
}
type YndexResponseModel struct {
Info []Threatstr `json:"info"`
Url string `json:"url"`
}
func main() {
result := CheckYandex("likegodak.club")
if result != nil {
fmt.Println(result.Info, result.Url)
}
}
func CheckYandex(site string) *YndexResponseModel {
var (
apiurl string = "https://yandex.ru/safety/check"
cl = &http.Client{Timeout: 15 * time.Second}
strformat = fmt.Sprintf(`{"url": "%s"}`, site)
jsonStr = []byte(strformat)
)
r, err := http.NewRequest("POST", apiurl, bytes.NewBuffer(jsonStr))
if err != nil {
return nil
}
r.Header.Set("Content-Type", "application/json")
r.Close = true
resp, err := cl.Do(r)
if err != nil {
return nil
}
defer resp.Body.Close()
var status YndexResponseModel
err = json.NewDecoder(resp.Body).Decode(&status)
if err != nil {
return nil
}
return &status
}
主要修改:
- 将结构体定义移到函数外部,避免重复定义
- 添加JSON标签以正确映射字段
- 在函数内部创建
status变量并传递其地址给解码器 - 添加错误处理,在请求失败或解码失败时返回
nil - 修正了
Content-Type头的大小写
这样修改后,响应数据应该能正确解码到结构体中。

