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

Vue.js中input上传CSV转JSON报错:TypeError: csv.split is not a function

Vue.js 上传CSV转JSON报错 TypeError: csv.split is not a function 的解决方法

我尝试用Vue.js的input标签上传CSV文件并转换为JSON,代码如下:

<input type="file" ref="myfile" @change="csvJSON($event)" />
csvJSON(csv) {
    console.log(csv)
    var lines = csv.split('\n')

    var result = []

    var headers = lines[0].split(',')

    for (var i = 1; i < lines.length; i++) {
        var obj = {}
        var currentline = lines[i].split(',')

        for (var j = 0; j < headers.length; j++) {
            obj[headers[j]] = currentline[j]
        }

        result.push(obj)
    }
    console.log('data', result)
},

运行后一直出现如下错误:

TypeError: csv.split is not a function
    at VueComponent.csvJSON (Tables.vue?074c:179:1)
    at change (Tables.vue?8f4b:282:1)
    at invokeWithErrorHandling (vue.runtime.esm.js?2b0e:3015:1)
    at HTMLInputElement.invoker (vue.runtime.esm.js?2b0e:1813:1)
    at original_1._wrapper (vue.runtime.esm.js?2b0e:7458:1)

问题原因

你直接将change事件对象传给了csvJSON方法,但事件对象本身不是CSV文本内容,自然无法调用split方法。input上传文件时,文件内容需要通过FileReader API读取,而不是直接使用事件对象。

修正后的代码

保留原模板不变,修改csvJSON方法如下:

csvJSON(event) {
    // 获取上传的文件对象
    const file = event.target.files[0];
    if (!file) return;

    // 创建FileReader实例读取文件内容
    const reader = new FileReader();
    reader.onload = function(e) {
        // 读取完成后拿到CSV文本内容
        const csv = e.target.result;
        console.log(csv);
        
        var lines = csv.split('\n');
        var result = [];
        var headers = lines[0].split(',');

        for (var i = 1; i < lines.length; i++) {
            var obj = {};
            var currentline = lines[i].split(',');
            
            // 跳过空行,避免无效数据
            if (!currentline[0]) continue;

            for (var j = 0; j < headers.length; j++) {
                // 可选:trim()去除字段前后空格,优化数据格式
                obj[headers[j]] = currentline[j]?.trim();
            }
            result.push(obj);
        }
        console.log('data', result);
    };
    
    // 以纯文本形式读取文件
    reader.readAsText(file);
}

关键说明

  • 从event.target.files[0]获取用户上传的CSV文件对象
  • 使用FileReader的readAsText方法读取文件内容,读取完成后在onload回调中处理CSV文本
  • 加入空行判断,避免处理文件末尾的空行导致异常
  • 可选的trim()方法可以清理字段前后的空格,让转换后的JSON数据更规范

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 17:46:27