网络编程
位置:首页>> 网络编程>> JavaScript>> js如何读取csv内容拼接成json

js如何读取csv内容拼接成json

作者:Chris_Zk  发布时间:2023-08-13 02:20:14 

标签:js,读取,csv,拼接,json

js 读取csv内容拼接成json

formdata对象上传了csv文件,读取文件内容拼接成json对象

js如何读取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/82666934

0
投稿

猜你喜欢

  • 今天我去隽辰的博客去看他的文章,在读完他的文章之后,我很自然的就去读网友们给他留的评论,在读的时候我发现他的评论是顺序的,也就是最早的评论在
  • PNG格式以支持透明和无损,且相对大小适中,已成为现在网页中图片运用的主流。有些时候我们在制作网页时使用PNG格式图片,用IE浏览器查看却无
  • 长话短说,今天介绍实现此功能的一个方法,需要了解的朋友可以参考下:一、JS 重载页面,本地刷新,返回上一页 代码如下:<a href=
  • 一、安装go get github.com/sirupsen/logrus二、使用1、当做标准库使用logrus实现了标准库log的方法,可
  • 很多现代的浏览器在地址栏的右边有个搜索框,默认的安装有 Google 搜索等。如下图所示:其实这是 OpenSearch 的一个应用,只要编
  • 英文原文:The seven rules of Unobtrusive JavaScript原文地址:http://icant.co.uk/
  • 最近一直忙,我们的注册页面还是在持续优化。今天抽时间分析了下数据,依然以主注册表单为例,对表单里3个区块、9个字段做了个小小出错排行;看看哪
  • 随着手机用户的不断增加,WAP站点如雨后春笋迅速的滋长开来,手机邮箱也不断的出现在人的眼前,笔者也曾经开发了一套手机邮箱的系统,但由于时间仓
  • rhel5下默认安装mysql5.0后,中文显示为乱码原因:mysql默认字符集是latin,所以中文不能正常显示解决方法:修改配置文件,
  • 如果你用SQL Server 2005 Management Studio建立函数或存储过程,你会注意到这些新窗口中都是模板。通常,你可以获
  • 看完了这个你就可以用asp修改注册表了!大名鼎鼎的WSH听说过吗? 它就是Windows script Host的缩写形式,WSH是Wind
  • 年初的时候收藏过一篇关于mysqlreport的报表解读,和内置的show status,和show variables相比mysqlrep
  • 如下:counter.htm<a href=counter.asp?save=123&url=http://127.0.0
  • 代码片段一:alert(Function instanceof Object); // truealert(Object instanceo
  • 无意中看到一位学员的屏保,感觉挺有意思的,就把它实现了下来效果如下:<!DOCTYPE html PUBLIC "-//W3
  • 一个拖动层和Onmouse自动下拉效果,IE支持,不支持ff。下面所示的效果四个小块可以拖动到页面任意点,大黑块可以连同四个小块随动。<
  • 说明:通过随机产生密码,然后将密码EMail给注册用户,你可以确认用户的EMail填写是否正确。自动产生的密码往往安全性更高,同时,你可以过
  • 0. 前言无论在工作中,还是学习中,都会出现这样子的需求,对某张表进行了排序(按时间排序也好,其他字段排序也罢),然后获取前x行的数据,由于
  • 在国内外大中型数据库管理系统中,把ORACLE作为数据库管理平台的用户比较多。RACLE 不论是数据库管理能力还是安全性都是无可非
  • 先谈一下面包屑的由来:很久很久以前,在大森林的边上住着一个贫穷的樵夫,他妻子和两个孩子与他相依为命。他的儿子名叫汉赛尔,女儿名叫格莱特。后来
手机版 网络编程 asp之家 www.aspxhome.com