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

目录
  • js 读取csv内容拼接成json
  • 纯js读取txt,xlsx,csv,xls文件

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插件读取四种类型的文件

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • 使用javascript实现json数据以csv格式下载

    摘要: 最近有一个非项目的小需求,就是将项目开发分工文件化,方便后期管理维护.但是开发时,分工安排都是以json格式记录的,所以就做了一个将json数据以csv格式下载到本地. 代码: 复制代码 代码如下: <!DOCTYPE html> <html>     <title>download csv</title>     <head>         <script src="http://code.jquery.com/jqu

  • 最简单的JS实现json转csv的方法

    工作久了,总会遇到各种各样的数据处理工作,比如同步数据,初始化一些数据,目前比较流行的交互数据格式就是JSON,可是服务器中得到的JSON数据如果提供给业务人员看的话可能会非常不方便,这时候,转成CSV文件,可以方便的被Excel工具进行读写.另外就是,json转CSV之后,会很容易的同部到数据库中,这样也非常有用,当然,这些软件功能已经被人开发过了,但是网上的多数代码都比较复杂,那些在线的转换工具也有不少,但是考虑数据安全,还是尽量别往任何不相干的网站上传数据,要知道万一敏感数据泄露可能会对自

  • js读取csv文件并使用json显示出来

    摘要: 前面分享了用js将json数据下载为csv文件,方便后期管理.但是对于测试人员更希望能够以页面的形式展现任务,所以就做了一个将csv文件展现在页面上的例子. 代码: 复制代码 代码如下: <!DOCTYPE html> <html> <head>     <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />     <ti

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

    目录 js 读取csv内容拼接成json 纯js读取txt,xlsx,csv,xls文件 js 读取csv内容拼接成json formdata对象上传了csv文件,读取文件内容拼接成json对象 var form = new FormData(); var files = $("#getfile")[0].files; var reader = new FileReader(); reader.readAsText( files[0],"gbk" ); //以文本格

  • JS实现读取xml内容并输出到div中的方法示例

    本文实例讲述了JS实现读取xml内容并输出到div中的方法.分享给大家供大家参考,具体如下: note.xml文件结构: <nooo> <note> <to>George</to> <from>John</from> <heading>Reminder</heading> <body>Don't forget the meeting!</body> </note> <n

  • C#实现将类的内容写成JSON格式字符串的方法

    本文实例讲述了C#实现将类的内容写成JSON格式字符串的方法.分享给大家供大家参考.具体如下: 本例中建立了Person类,赋值后将类中内容写入到字符串中 运行本代码需要添加引用动态库Newtonsoft.Json 程序代码: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; //需要引用 Newtonsoft.Js

  • SQL Server将一列的多行内容拼接成一行的实现方法

    下面大家先看下示例代码: 示例 昨天遇到一个SQL Server的问题:需要写一个储存过程来处理几个表中的数据,最后问题出在我想将一个表的一个列的多行内容拼接成一行,比如表中有两列数据 : 类别 名称 AAA 企业1 AAA 企业2 AAA 企业3 BBB 企业4 BBB 企业5 我想把这个表变成如下格式: 类别 名称 AAA 企业1,企业2,企业3 BBB 企业4,企业5 一开始挺头疼的(会了的肯定没有这种感觉,不会那必须是头疼啊(*^__^*) ),从网上找了点资料,算是找到一种比较简单方便

  • java 读取excel文件转换成json格式的实例代码

    需要读取excel数据转换成json数据,写了个测试功能,转换正常: JSON转换:org.json.jar 测试类:  importFile.java: package com.siemens.util; import java.util.ArrayList; import java.util.List; import org.json.JSONException; import org.json.JSONObject; import org.apache.poi.ss.usermodel.R

  • js文本框输入内容智能提示效果

    本文实例讲述了js文本框输入内容智能提示效果代码.分享给大家供大家参考.具体如下: 运行效果截图如下: 大体思路: 1.监听文本框事件.这里是用的keyup事件.大家可以尝试用onchange事件.不过感觉keyup事件的效果要好一点. 2.根据输入内容通过ajax异步的方式去访问后台数据. 3.遍历返回数据将数据添加到显示区域. 4.在添加数据的同时给每一条数据加上一些效果,点击其中一条将数据填到文本框,并且提示内容消失. 5.后台数据应该拼接成json格式. 具体代码如下: <!DOCTYP

  • 关于python 读取csv最快的Datatable的用法,你都学会了吗

    2021年7月1日,官方正式发布了1.0Datatable版本.1.0版本支持windows和linux,以及Macos. 具体文档可以见: https://datatable.readthedocs.io/en/latest/start/using-datatable.html Datatable与众不同就是快! 需要说明的是,使用Datatable库需要python3.6及以上版本. import datatable as dt import pandas as pd import time

  • Python读取CSV文件并进行数据可视化绘图

    介绍:文件 sitka_weather_07-2018_simple.csv是阿拉斯加州锡特卡2018年1月1日的天气数据,其中包含当天的最高温度和最低温度.数据文件存储与data文件夹下,接下来用Python读取该文件数据,再基于数据进行可视化绘图.(详细细节请看代码注释) sitka_highs.py import csv # 导入csv模块 from datetime import datetime import matplotlib.pyplot as plt filename = 'd

  • js将json格式的对象拼接成复杂的url参数方法

    var parseParam=function(param, key){ varparamStr=""; if(paraminstanceof String||param instanceof Number||param instanceof Boolean){ paramStr+="&"+key+"="+encodeURIComponent(param); }else{ $.each(param,function(i){ vark=ke

随机推荐