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

JSON反序列化后嵌套结构体数组丢失问题求助

解决Go中JSON反序列化嵌套结构体数组丢失的问题

我一眼就看到了几个导致你嵌套数组反序列化后丢失的关键点,咱们一个个来修正:

1. JSON字符串的语法错误

你的JSON里"shared_items:"多了个多余的冒号,这会导致Go的JSON解析器找不到对应的字段,直接跳过这个键值对。修正后的JSON应该是:

const myStr = `{ "name": "test_session1", "shared_items": [ { "id": 0, "name": ".aspnet" }, { "id": 1, "name": ".bash_profile" } ] }`

2. 结构体定义的核心问题

你的Session结构体有两个明显疏漏:

  • Name字段的JSON标签写成了json:"...",这完全不对,应该对应JSON里的name键,即json:"name"
  • 根本没有定义对应shared_items的字段!这是最关键的问题——你都没告诉Go要把JSON里的数组映射到哪个结构体字段,自然反序列化后就丢失了

另外SharedItem结构体也要确保JSON标签和JSON键完全对应。修正后的结构体定义如下:

type SharedItem struct {
    ID   uint64 `json:"id"`
    Name string `json:"name"`
}

type Session struct {
    ID          uint64       `json:"id,omitempty"` // 原JSON里没有id字段,加omitempty避免序列化时输出空值
    Name        string       `json:"name"`
    SharedItems []SharedItem `json:"shared_items"` // 新增字段对应JSON里的嵌套数组
}

3. 完整的反序列化示例代码

把这些修正点整合起来,完整的可运行代码如下:

package main

import (
    "encoding/json"
    "fmt"
)

type SharedItem struct {
    ID   uint64 `json:"id"`
    Name string `json:"name"`
}

type Session struct {
    ID          uint64       `json:"id,omitempty"`
    Name        string       `json:"name"`
    SharedItems []SharedItem `json:"shared_items"`
}

func main() {
    const myStr = `{ "name": "test_session1", "shared_items": [ { "id": 0, "name": ".aspnet" }, { "id": 1, "name": ".bash_profile" } ] }`
    
    var session Session
    err := json.Unmarshal([]byte(myStr), &session)
    if err != nil {
        fmt.Println("反序列化失败:", err)
        return
    }
    
    fmt.Printf("反序列化结果:\n%+v\n", session)
}

运行这段代码后,你就能看到SharedItems数组被正确解析出来,输出大概是:

反序列化结果:
{ID:0 Name:test_session1 SharedItems:[{ID:0 Name:.aspnet} {ID:1 Name:.bash_profile}]}

总结一下,这类问题大多是JSON语法错误或者结构体字段与JSON键的映射不匹配导致的,下次遇到可以先优先检查这两点哦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:35:33