You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Go语言从URL获取JSON后解析失败,无法映射到结构体求助

解决Go JSON解析失败的问题

嘿,我看了你的代码和输出,问题出在JSON结构和你的Go结构体不匹配上,咱们一步步来修复:

首先看你拿到的JSON返回内容:

{"user":[{"ProductId":1,"ProductName":"Helmet"},{"ProductId":2,"ProductName":"Glove"},{"ProductId":3,"ProductName":"Detecttor"}]}

这个JSON的最外层是一个包含user字段的对象,而user的值是一个Product对象数组,但你的代码直接把整个JSON解析到单个Product结构体里,这肯定匹配不上;另外你的Product结构体的JSON标签和实际返回的字段名也不对应——JSON里的字段是ProductId和ProductName,但你写的标签是json:"id"和json:"description",这也会导致映射失败。

修正后的代码

package main
import (
    "encoding/json"
    "fmt"
    "io/ioutil"
    "log"
    "net/http"
    "os"
)

// 定义单个Product结构体,标签和JSON字段完全对应
type Product struct {
    ProductId   int    `json:"ProductId"`
    ProductName string `json:"ProductName"`
}

// 定义外层响应结构体,对应JSON最外层的user数组
type Response struct {
    User []Product `json:"user"`
}

func main() {
    url := "https://script.googleusercontent.com/macros/echo?user_content_key=WBSJPDNSN6X1FCYeXsR6TDaDval0vdvmSoMmXFhGbt5sfK0ia80Dp7kPD27GLpZbYz8vrwfDiUecI2oGMjEtgfL5o8Da25T1m5_BxDlH2jW0nuo2oDemN9CCS2h10ox_1xSncGQajx_ryfhECjZEnGb6k9xaGtOX6M1tIiG811CRpk9nXl8ZKS7UJTno1dvQXMe1kqfAj8WxsSkLor-EqzOmbnRGq-tk&lib=M0B6GXYh0EOYMkP7qr1Xy9xw8GuJxFqGH"
    resp, err := http.Get(url)
    if err != nil {
        log.Fatal(err)
    }
    defer resp.Body.Close()

    htmlData, err := ioutil.ReadAll(resp.Body) 
    if err != nil {
        fmt.Println(err)
        os.Exit(1)
    }

    fmt.Println(string(htmlData))

    var respData Response
    err = json.Unmarshal(htmlData, &respData)
    if err != nil {
        // 新增错误检查,方便排查解析问题
        log.Fatal("JSON解析失败:", err)
    }

    // 遍历输出每个Product信息
    for _, p := range respData.User {
        fmt.Printf("ID: %d, Description: %s\n", p.ProductId, p.ProductName)
    }
}

关键改动点说明

  • 新增Response结构体,用来匹配JSON最外层的user数组字段,确保解析时能正确定位到数组数据。
  • 修改Product结构体的JSON标签,让json:"ProductId"和json:"ProductName"完全对应返回的JSON字段名。
  • 把ProductId的类型改成int,因为JSON里的ID是数字类型,原来的string类型会导致解析失败。
  • 新增了解析错误的检查,后续遇到类似问题能快速定位原因。

运行这段代码后,就能正确输出每个Product的ID和名称了。

内容的提问来源于stack exchange,提问作者Hasan A Yousef

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 15:53:02