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

如何使用Golang将无规则分隔的表格转换为JSON?

用Golang将不规则分隔的表格转换为JSON数组

针对表格列分隔无固定规律(混合空格、制表符)且含空字段的场景,可通过以下步骤实现转换:

核心思路

  1. 解析表头确定字段数量与名称
  2. 逐行处理数据,用正则分割任意空白得到字段值,补全空字段以匹配表头列数
  3. 将字段映射到结构体,最终序列化为JSON数组

完整示例代码

package main

import (
    "encoding/json"
    "fmt"
    "regexp"
    "strings"
)

// 定义与表格字段对应的结构体,JSON标签指定输出键名
type Record struct {
    State   string `json:"state"`
    Version string `json:"version"`
    Status  string `json:"status"`
    Comment string `json:"comment"`
}

func main() {
    // 示例表格内容(模拟不规则分隔、空字段)
    tableContent := `State Version Status  Comment
NY    2.0.1   active  
CA    1.3.0          "needs update"
TX             inactive
WA    1.5.2   pending  "in progress"`

    // 按行拆分内容
    lines := strings.Split(tableContent, "\n")
    if len(lines) < 1 {
        fmt.Println("表格内容为空")
        return
    }

    // 处理表头:分割得到字段名,确定列数
    headerLine := strings.TrimSpace(lines[0])
    headers := regexp.MustCompile(`\s+`).Split(headerLine, -1)
    colCount := len(headers)
    if colCount == 0 {
        fmt.Println("表头无效")
        return
    }

    var records []Record

    // 遍历处理每一行数据
    for _, line := range lines[1:] {
        trimmedLine := strings.TrimSpace(line)
        if trimmedLine == "" {
            continue // 跳过空行
        }

        // 用正则分割任意空白(空格、制表符、连续空白)
        fields := regexp.MustCompile(`\s+`).Split(trimmedLine, -1)
        
        // 补全空字段,确保字段数与表头一致
        for len(fields) < colCount {
            fields = append(fields, "")
        }
        // 若分割后字段数超出表头列数,取前colCount个(可根据实际需求调整)
        if len(fields) > colCount {
            fields = fields[:colCount]
        }

        // 构造记录,处理带引号的字段(如Comment)
        record := Record{
            State:   fields[0],
            Version: fields[1],
            Status:  fields[2],
            Comment: strings.Trim(fields[3], `"`),
        }
        records = append(records, record)
    }

    // 序列化为格式化后的JSON
    jsonData, err := json.MarshalIndent(records, "", "  ")
    if err != nil {
        fmt.Printf("JSON序列化失败: %v\n", err)
        return
    }

    fmt.Println(string(jsonData))
}

关键细节说明

  • 不规则分隔处理:用regexp.MustCompile(\s+)匹配任意数量的空白字符(空格、制表符),避免固定分隔符的局限性
  • 空字段补全:确保每一行的字段数与表头列数一致,避免结构体赋值时索引越界
  • 字段清洗:用strings.TrimSpace去除行首尾空白,用strings.Trim处理字段可能带的引号
  • 文件读取适配:如果表格来自文件,可替换为bufio.Scanner逐行读取,逻辑与上述代码一致

输出示例

运行代码后会得到如下JSON数组:

[
  {
    "state": "NY",
    "version": "2.0.1",
    "status": "active",
    "comment": ""
  },
  {
    "state": "CA",
    "version": "1.3.0",
    "status": "",
    "comment": "needs update"
  },
  {
    "state": "TX",
    "version": "",
    "status": "inactive",
    "comment": ""
  },
  {
    "state": "WA",
    "version": "1.5.2",
    "status": "pending",
    "comment": "in progress"
  }
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 13:20:06