Go语言无结构体定义实现Excel转JSON字符串需求咨询
无结构体/列标题依赖的Excel转JSON方案(Go语言)
你可以直接用github.com/xuri/excelize/v2实现需求——它完全支持不依赖结构体、不依赖列标题的原始Excel数据读取与JSON转换,之前的调研可能没挖到这个用法。
核心实现思路
直接遍历Excel工作表的所有行和单元格,把原始单元格值按二维数组的结构组织,再通过Go标准库的encoding/json序列化为JSON字符串。全程不需要预定义结构体,也不需要依赖列标题。
完整代码示例
package main import ( "encoding/json" "fmt" "log" "github.com/xuri/excelize/v2" ) func main() { // 目标Excel文件路径 filePath := "your_file.xlsx" // 打开文件 f, err := excelize.OpenFile(filePath) if err != nil { log.Fatalf("打开文件失败: %v", err) } defer f.Close() // 获取第一个工作表(可根据需求指定工作表名称) sheetName := f.GetSheetName(0) // 读取所有行数据 rows, err := f.GetRows(sheetName) if err != nil { log.Fatalf("读取行数据失败: %v", err) } // 构造原始数据的二维切片 var rawData [][]interface{} for _, row := range rows { rowData := make([]interface{}, len(row)) for idx, cellValue := range row { rowData[idx] = cellValue } rawData = append(rawData, rowData) } // 转换为格式化后的JSON字符串 jsonBytes, err := json.MarshalIndent(rawData, "", " ") if err != nil { log.Fatalf("JSON序列化失败: %v", err) } // 输出或保存JSON fmt.Println(string(jsonBytes)) }
进阶优化:保留单元格原始类型
上面的示例会把所有单元格值转成字符串,如果需要保留数字、日期等原始类型,可以结合GetCellType做类型转换:
import "strconv" import "time" // 替换单元格值处理逻辑 cellAddr, _ := excelize.CoordinatesToCellName(idx+1, rowIdx+1) // 列、行号转单元格地址(excelize为1起始) cellType, _ := f.GetCellType(sheetName, cellAddr) switch cellType { case excelize.CellTypeNumeric: numVal, _ := f.GetCellValue(sheetName, cellAddr) floatVal, _ := strconv.ParseFloat(numVal, 64) rowData[idx] = floatVal case excelize.CellTypeString: rowData[idx] = cellValue case excelize.CellTypeDate: dateVal, _ := f.GetCellValue(sheetName, cellAddr) timeVal, _ := excelize.ExcelDateToTime(dateVal, false) rowData[idx] = timeVal.Format(time.RFC3339) default: rowData[idx] = cellValue }
使用说明
- 先安装依赖:
go get github.com/xuri/excelize/v2 - 把代码中的
your_file.xlsx替换为你的目标Excel文件路径 - 运行代码即可得到原始数据对应的JSON字符串
内容的提问来源于stack exchange,提问作者Pramit Pakhira
相关产品推荐
相关产品推荐

