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

如何在Golang中反序列化包含匿名数组的JSON数据?

解析JSON触发Panic的问题修复

你的代码存在几个关键问题,导致JSON解析失败并触发Panic,以下是问题分析和修复方案:

核心问题

  1. JSON结构与Go类型不匹配
    你收到的JSON是二维字符串数组([][]string),但你定义的AllRanges结构体是一个包含Ranges字段的对象,JSON中并没有Ranges这个键,直接是顶层数组,这会导致反序列化时类型不匹配,触发错误。

  2. 未定义变量错误

    • file变量未声明,os.ReadFile需要传入具体的文件名字符串
    • 反序列化时使用了未声明的v变量,应该指向合法的目标变量

修复方案

方案1:直接解析为二维字符串数组

如果不需要映射到自定义结构体,直接将JSON解析为[][]string即可:

package main

import (
    "encoding/json"
    "fmt"
    "os"
)

func main() {
    // 替换为你的JSON文件实际路径
    filePath := "data.json"
    j, err := os.ReadFile(filePath)
    if err != nil {
        panic(fmt.Sprintf("读取JSON文件失败: %v", err))
    }

    var ranges [][]string
    err = json.Unmarshal(j, &ranges)
    if err != nil {
        panic(fmt.Sprintf("解析JSON失败: %v", err))
    }

    // 验证解析结果
    fmt.Println("解析完成,数据如下:")
    for _, item := range ranges {
        fmt.Printf("From: %s, To: %s, Do: %s\n", item[0], item[1], item[2])
    }
}

方案2:转换为自定义Range结构体

如果需要将JSON数据映射到你的Range结构体,需要先解析为二维数组,再手动转换为结构体切片:

package main

import (
    "encoding/json"
    "fmt"
    "os"
)

type Range struct {
    From string
    To   string
    Do   string
}

func main() {
    filePath := "data.json"
    j, err := os.ReadFile(filePath)
    if err != nil {
        panic(fmt.Sprintf("读取JSON文件失败: %v", err))
    }

    // 先解析为二维字符串数组
    var rawData [][]string
    err = json.Unmarshal(j, &rawData)
    if err != nil {
        panic(fmt.Sprintf("解析JSON失败: %v", err))
    }

    // 转换为Range结构体切片
    var ranges []Range
    for _, raw := range rawData {
        if len(raw) != 3 {
            panic("每个数组元素必须包含3个字符串")
        }
        ranges = append(ranges, Range{
            From: raw[0],
            To:   raw[1],
            Do:   raw[2],
        })
    }

    // 打印转换后的结果
    fmt.Println("转换后的结构体数据:")
    for _, r := range ranges {
        fmt.Printf("%+v\n", r)
    }
}

额外优化建议

  • 生产代码中建议避免直接使用panic处理错误,可用fmt.Println或日志库输出错误后退出程序
  • 增加对JSON数组元素长度的校验,防止数组元素数量不足导致索引越界

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 12:25:14