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

Go语言嵌套JSON转Struct失败,请求解决方法

Go嵌套JSON解析失败的解决方法

问题原因

你的代码中存在两个核心问题导致内层ObjectTags数据解析失败:

  1. 结构体字段访问权限问题:ObjectTagsList的字段都是小写开头,Go语言中这类字段属于包私有成员,encoding/json包无法通过反射机制访问这些字段,因此JSON中的对应值无法映射到结构体中,最终输出空结构。
  2. 字段缺失:原JSON中的tagType字段未在ObjectTagsList结构体中定义,虽然不影响基础解析,但如果需要保留该字段信息,必须补充定义。

解决方案

将ObjectTagsList的字段改为大写开头(公开成员),并添加对应的json标签(确保和JSON键名严格对应,即使大小写匹配也建议显式声明,提升代码健壮性),同时补充tagType字段(若不需要可忽略,但建议保持结构一致)。

修正后的完整代码

package main

import (
    "encoding/json"
    "fmt"
)

// 字段改为公开(大写开头),添加json标签映射JSON键名,补充tagType字段
type ObjectTagsList struct {
    TagCode  string   `json:"tagCode"`
    TagName  string   `json:"tagName"`
    TagValue []string `json:"tagValue"`
    TagType  int      `json:"tagType"`
}

type Model struct {
    Action   string `json:"action"`
    Business struct {
        ListId     int64             `json:"ListId"`
        ObjectTags []ObjectTagsList `json:"ObjectTags"`
    } `json:"business"`
}

func main() {
    jsonStr := `{"action":"add","business":{"ListId":123,"ObjectTags":[{"tagCode":"csharp","tagName":"codename","tagValue":["2"],"tagType":3},{"tagCode":"goLang","tagName":"coding","tagValue":["3"],"tagType":3}]}}`

    var model Model
    err := json.Unmarshal([]byte(jsonStr), &model)
    if err != nil {
        fmt.Println("解析错误:", err)
        return
    }

    // 验证字段访问
    fmt.Println(model.Action) // 输出: add
    fmt.Println(model.Business.ListId) // 输出: 123
    fmt.Println(model.Business.ObjectTags[0].TagCode) // 输出: csharp
    fmt.Println(model.Business.ObjectTags[1].TagName) // 输出: coding
    fmt.Println(model.Business.ObjectTags[0].TagValue[0]) // 输出: 2
    fmt.Println(model.Business.ObjectTags[1].TagType) // 输出: 3
}

关键说明

  • 字段访问权限:Go的反射机制仅能访问公开(大写开头)的结构体字段,encoding/json依赖反射完成JSON与结构体的映射,这是解析成功的核心前提。
  • json标签作用:如果结构体字段名与JSON键名不一致,可通过标签指定对应关系;即使一致,显式声明也能避免后续字段名修改导致的解析失败。
  • 错误处理:添加err判断可以及时捕获解析过程中的异常,比如JSON格式错误、字段类型不匹配等问题。

内容的提问来源于stack exchange,提问作者Byte

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 09:22:22