js如何读取csv内容拼接成json
更新时间:2022年9月29日 08:30 点击:226 作者:Chris_Zk
js 读取csv内容拼接成json
formdata对象上传了csv文件,读取文件内容拼接成json对象
var form = new FormData(); var files = $("#getfile")[0].files; var reader = new FileReader(); reader.readAsText( files[0],"gbk" ); //以文本格式读取 reader.onload = function(evt){ var data = evt.target.result; //读到的数据 console.log(data); splitdate = data.split(/\s+/) ; console.log(splitdate.length) var arr1=new Array(); var arr2=new Array(); var phone=new Array(); var name=new Array(); for(var i=0;i<splitdate.length;i++){ var data =splitdate[i].split(","); arr1.push(data[0]) arr2.push(data[2]) } for(var i=1;i<arr1.length-1;i++){ name.push(arr1[i]) } for(var i=1;i<arr2.length-1;i++){ phone.push(arr2[i]) } var userList = []; for(var i=0;i<name.length;i++){ var json = {}; json.value = name[i]; json.name = phone[i]; console.log(json); userList.push(json); } console.log(userList) }
最终拼接成为key value格式的json对象
纯js读取txt,xlsx,csv,xls文件
为了减少服务器的压力,需要前端读取文件数据,然后自己拼接分批提交给后台,这里将读文件记录下来
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>读取文件</title> <script src="js/shim.js"></script> <script src="js/xlsx.full.min.js"></script> <script src="js/jschardet.min.js"></script> </head> <body> <input type='file' value="" id="read" > </body> <script> String.prototype.trim=function(){ //给字符串添加一个去前后空格的方法 return this.replace(/s|xA0/g,""); } window.οnlοad=function(){ var file=document.getElementById("read"); file.addEventListener("change",read,false); /*function resetInpuFile() { //定义一个重置input file控件的方法,否则如果文件不变,不能再次触发input控件的onchange事件 var control = event.target; //control.replaceWith(control = control.clone(true)); //这个重置方法对vue没用,vue的事件不是直接绑定的,所以复制不了 control.wrap('<form>').closest('form').get(0).reset(); //用一个form包裹input,调用form的reset方法,然后解除包裹 control.unwrap(); }*/ function read(e){ //获取文件类型 var filename=e.target.files[0].name; var phoneStr = ''; var messageContent=''; console.log(filename); var fileType=filename.substr(filename.lastIndexOf('.')+1,filename.length); console.log(fileType); //检测是浏览器是否支持readAsBinaryString函数 var rABS = typeof FileReader !== 'undefined' && typeof FileReader.prototype !== 'undefined' && typeof FileReader.prototype.readAsBinaryString !== 'undefined'; var reader=new FileReader(); if(rABS){ reader.readAsBinaryString(e.target.files[0]);//发起异步请求 }else{ reader.readAsArrayBuffer(e.target.files[0]);//发起异步请求 } //reader.readAsDataURL(e.target.files[0]);//发起异步请求 //reader.readAsArrayBuffer(e.target.files[0]);//发起异步请求 reader.οnlοad=function(e){ var data = e.target.result; if (fileType == 'txt' || fileType == 'csv') { //txt或csv文件直接读取 //console.log(data); var str = null; var viewBuf = null; if (rABS) { str = data; //此时data为binarystring,需要把binarystring转换为Uint8Array var newArray = []; for (var index = 0; index < data.length; index++) { newArray.push(data.charCodeAt(index)); } viewBuf = new Uint8Array(newArray); } else { viewBuf = new Uint8Array(data); //此时data为ArrayBuffer for (var index in viewBuf) { str += String.fromCharCode(viewBuf[index]); if (index >= 100) { //考虑到效率,只取前1000个用于判断字符集 break; } } } //console.log(str); var codepage = jschardet.detect(str.substring(0, 1000)).encoding; //console.log(codepage); if (codepage == 'GB2312' || codepage == 'GB18030') { codepage = 'GB18030'; } else if (codepage == 'ascii' || codepage == 'UTF-8' || codepage == 'UTF-16BE' || codepage == 'UTF-16LE') { } else { alert('不支持的编码格式:' + codepage + ';你只能使用UTF-8或GB18030(GB2320,GBK)编码格式文件'); // resetInpuFile(); return; } phoneStr = new TextDecoder(codepage).decode(viewBuf); console.log(phoneStr); } else if (fileType == 'xls' || fileType == 'xlsx') { //excle文件用js-xlsx解析 function fixdata(data) { //arrayBuffer转base64字符串 var o = "", l = 0, w = 10240; for (; l < data.byteLength / w; ++l) o += String.fromCharCode.apply(null, new Uint8Array(data.slice(l * w, l * w + w))); o += String.fromCharCode.apply(null, new Uint8Array(data.slice(o.length))); return o; } function get_columns(sheet, type) { //获取head头(excel文件第一行) var val, rowObject, range, columnHeaders, emptyRow, C; if (!sheet['!ref']) return []; range = XLS.utils.decode_range(sheet["!ref"]); columnHeaders = []; for (C = range.s.c; C <= range.e.c; ++C) { val = sheet[XLS.utils.encode_cell({ c: C, r: range.s.r })]; if (!val) continue; columnHeaders[C] = type.toLowerCase() == 'xls' ? XLS.utils.format_cell(val) : val.v; //console.log(val, columnHeaders[C]); } return columnHeaders; } var readtype = { type: rABS ? 'binary' : 'base64' }; if (!rABS) { arr = fixdata(data); data = btoa(arr); } //console.log('data:' + data); try { var workbook = XLSX.read(data, readtype); //workbook.SheetNames[0]是获取Sheets中第一个Sheet的名字,workbook.Sheets[Sheet名]获取第一个Sheet的数据 } catch (e) { alert('无法读取的excel文件,格式错误'); resetInpuFile(); return; } //console.log(wb); var XL = fileType.toUpperCase() === 'XLS' ? XLS : XLSX; //选择是XLS对象还是XLSX对象 workbook.SheetNames.forEach(function (sheetName) { var roa = XL.utils.sheet_to_json(workbook.Sheets[sheetName], { raw: true }); // console.log(roa); if (roa.length <= 0) { return; } var columns = get_columns(workbook.Sheets[sheetName], fileType); //获取本sheet的第一行 var keyName = ''; var keyName1=''; for (var index in columns) { //查看第一行的列里是否有诸如手机号码这样列名 //if ($.trim(columns[index]) === '手机号码') { if (columns[index].trim() === '手机号码') { keyName = columns[index]; continue; } //if($.trim(columns[index]) === '短信内容'){ if(columns[index].trim() === '短信内容'){ keyName1 = columns[index]; continue; } } if (keyName === '') { //没找到,返回 // console.log('没找到key'); return; } if (keyName1 === '') { //没找到,返回 // console.log('没找到key'); return; } for (var index=0;index<roa.length;index++) {//这里吧读出来的数据存成字符串 if(roa[index][keyName]!='' && roa[index][keyName1]!=''){ phoneStr += roa[index][keyName] + ','; messageContent +=(roa[index][keyName1]).replace(/,/g,',')+','; } } // }); //console.log(phoneStr); if (phoneStr === '' || messageContent==='') { alert('没有在excle文件中找到"手机号码或者短信内容"列'); // resetInpuFile(); return; } } console.log(phoneStr) console.log(messageContent) // resetInpuFile(); } } } </script> </html>
这里主要用到h5的fileReader API以及xlsx.js, jschardet.js插件读取四种类型的文件
以上为个人经验,希望能给大家一个参考,也希望大家多多支持猪先飞。
原文出处:https://blog.csdn.net/weixin_42601737/article/details/826669
相关文章
- 这篇文章主要介绍了C#从数据库读取图片并保存的方法,帮助大家更好的理解和使用c#,感兴趣的朋友可以了解下...2021-01-16
- 这篇文章主要介绍了js如何实现浏览器打印功能,文中示例代码非常详细,帮助大家更好的理解和学习,感兴趣的朋友可以了解下...2020-07-15
- 本篇文章主要分享了通过window.navigator来判断浏览器及其版本信息的实例代码。具有一定的参考价值,下面跟着小编一起来看下吧...2017-01-23
pandas pd.read_csv()函数中parse_dates()参数的用法说明
这篇文章主要介绍了pandas pd.read_csv()函数中parse_dates()参数的用法说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-05- 在php中解析xml文档用专门的函数domdocument来处理,把json在php中也有相关的处理函数,我们要把数据xml 数据存到一个数据再用json_encode直接换成json数据就OK了。...2016-11-25
- 这篇文章主要给大家介绍了关于Nest.js参数校验和自定义返回数据格式的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-03-28
- 这篇文章主要介绍了使用list stream:任意对象List拼接字符串操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-09-09
- 这篇文章主要介绍了@Cacheable 拼接key的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-02-13
- 这篇文章主要介绍了js实现调用网络摄像头及常见错误处理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-03-07
- 这篇文章主要为大家详细介绍了JS实现随机生成验证码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-09-06
- 这篇文章主要介绍了js组件SlotMachine实现图片切换效果制作抽奖系统的相关资料,需要的朋友可以参考下...2016-04-19
- 这篇文章主要介绍了基于JavaScript实现文字超出部分隐藏 的相关资料,需要的朋友可以参考下...2016-03-01
- 这篇文章主要介绍了JS实现响应鼠标点击动画渐变弹出层效果代码,具有非常自然流畅的动画过度效果,涉及JavaScript针对鼠标事件的响应及页面元素样式的动态操作相关技巧,需要的朋友可以参考下...2016-03-28
- 本文给大家介绍的是nodejs实现使用阿里大鱼短信API发送消息的方法和代码,有需要的小伙伴可以参考下。...2016-01-20
- 这篇文章主要为大家详细介绍了js实现列表按字母排序,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-08-11
- 作为前端,一直以来都知道HTTP劫持与XSS跨站脚本、CSRF跨站请求伪造。防御这些劫持最好的方法是从后端入手,前端能做的太少。而且由于源码的暴露,攻击者很容易绕过防御手段。但这不代表我们去了解这块的相关知识是没意义的,本文的许多方法,用在其他方面也是大有作用。...2021-05-24
- Vue.js通过简洁的API提供高效的数据绑定和灵活的组件系统.这篇文章主要介绍了vue.js 表格分页ajax 异步加载数据的相关资料,需要的朋友可以参考下...2016-10-20
- 这次文章要给大家介绍的是node.JS md5加密中文与php结果不一致怎么办,不知道具体解决办法的下面跟小编一起来看看。 因项目需要,需要Node.js与PHP做接口调用,发现nod...2017-07-06
- 系统的学习了一下angularjs,发现angularjs的有些思想根php的模块smarty很像,例如数据绑定,filter。如果对smarty比较熟悉的话,学习angularjs会比较容易一点,这篇文章给大家介绍angularjs filter用法详解,感兴趣的朋友一起学习吧...2015-12-29
- 使用require('crypto')调用加密模块。加密模块需要底层系统提供OpenSSL的支持。它提供了一种安全凭证的封装方式,可以用于HTTPS安全网络以及普通HTTP连接。该模块还提供了一套针对OpenSSL的hash(哈希),hmac(密钥哈希),cipher...2014-06-07