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

Go语言:如何在结构体中定义多维数组实现JSON反序列化?

解决Go JSON反序列化数组到结构体的问题

你的问题核心很明确:JSON里的Users是一个数组(包含两个用户对象),但你在Root结构体里把Myuser字段定义成了单个Users结构体,这就导致JSON包无法把数组转换成单个结构体,所以抛出了cannot unmarshal array into go struct field Root.Myuser的错误。

修正方案:把Myuser定义为切片类型

Go中,JSON数组对应的是Go的**切片(slice)**类型,所以你只需要把Root结构体里的Myuser字段类型从Users改成[]Users即可。

修正后的完整结构体定义

type Root struct {
    ID     string   `json:"id,omitempty"`
    Title  string   `json:"Title,omitempty"`
    Myuser []Users  `json:"Users,omitempty"` // 这里改成切片类型[]Users
    Tag    string   `json:"Tag,omitempty"`
}

type Users struct {
    ID   string `json:"id,omitempty"`
    Name string `json:"Name,omitempty"`
}

type Unmarh struct {
    Me []Root `json:"me"`
}

完整测试代码

下面是可以直接运行的示例,验证反序列化是否正常:

package main

import (
    "encoding/json"
    "fmt"
)

type Root struct {
    ID     string   `json:"id,omitempty"`
    Title  string   `json:"Title,omitempty"`
    Myuser []Users  `json:"Users,omitempty"`
    Tag    string   `json:"Tag,omitempty"`
}

type Users struct {
    ID   string `json:"id,omitempty"`
    Name string `json:"Name,omitempty"`
}

type Unmarh struct {
    Me []Root `json:"me"`
}

func main() {
    // 你的JSON数据
    response := []byte(`{"me":[{"id": "0xcfd","Title":"Story of Stackoverflow","Users":[{"id":"1","Name":"MetaBoss"},{"id":"2","Name":"Owner"}],"Tag":"golang,programming"}]}`)
    
    var r Unmarh
    err := json.Unmarshal(response, &r)
    if err != nil {
        fmt.Printf("反序列化错误: %v\n", err)
        return
    }

    // 打印获取到的用户数据
    fmt.Println("第一个Root对象的用户列表:")
    for _, user := range r.Me[0].Myuser {
        fmt.Printf("ID: %s, Name: %s\n", user.ID, user.Name)
    }
}

运行结果

执行这段代码后,你会看到正确输出:

第一个Root对象的用户列表:
ID: 1, Name: MetaBoss
ID: 2, Name: Owner

这样就能正常获取到Users数组里的数据了,核心就是匹配JSON结构和Go结构体的类型:JSON数组对应Go切片,JSON对象对应Go结构体。

内容的提问来源于stack exchange,提问作者Lambda killed App

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 03:54:28