import React, { Component } from 'react';
import PropTypes from 'prop-types'
export default function JSONToCSVConvertor(obj) {
var JSONData = obj['data'],
ShowLabel = typeof obj['showLabel'] === 'undefined' ? true : obj['showLabel'],
ReportTitle = obj['title']
//If JSONData is not an object then JSON.parse will parse the JSON string in an Object
var arrData = typeof JSONData != 'object' ? JSON.parse(JSONData) : JSONData;
var CSV = '';
var ShowLabel = typeof ShowLabel === 'undefined' ? true : ShowLabel;
//This condition will generate the Label/Header
if (ShowLabel) {
var row = "";
//This loop will extract the label from 1st index of on array
for (var index in arrData[0]) {
//Now convert each value to string and comma-seprated
row += index + ',';
}
row = row.slice(0, -1);
//append Label row with line break
CSV += row + '\r\n';
}
//1st loop is to extract each row
for (var i = 0; i < arrData.length; i++) {
var row = "";
//2nd loop will extract each column and convert it in string comma-seprated
for (var index in arrData[i]) {
row += '"' + arrData[i][index] + '",';
}
row.slice(0, row.length - 1);
//add a line break after each row
CSV += row + '\r\n';
}
if (CSV == '') {
console.error();
("Invalid data");
return;
}
// export file
SaveAs(ReportTitle,CSV);
}
function SaveAs (ReportTitle, CSV){
console.log("get brower version");
var Sys = _browerVersion();
if(Sys.isChrome){
//this trick will generate a temp "a" tag
var link = document.createElement("a");
link.id = "lnkDwnldLnk";
//this part will append the anchor tag and remove it after automatic click
document.body.appendChild(link);
var csv = CSV;
var csvUrl = _getDownloadUrl(csv); //window.webkitURL.createObjectURL(blob);
var filename = ReportTitle || 'UserExport';
filename = filename + '.csv';
var linkDom = document.getElementById('lnkDwnldLnk');
linkDom.setAttribute('download', filename);
linkDom.setAttribute('href', csvUrl);
linkDom.click();
document.body.removeChild(link);
}
if(Sys.isIE){
var BOM = "\uFEFF";
var csvUrl = new Blob([BOM + CSV], {
type: 'text/csv'
});
var filename = ReportTitle || 'UserExport';
filename = filename + '.csv';
navigator.msSaveBlob(csvUrl,filename);
}
}
function _browerVersion(){
var Sys = {};
//judge the brower version
var userAgent = navigator.userAgent;
console.log(userAgent);
var isOpera = userAgent.indexOf("Opera") > -1; //whether Opera
var isIE=window.ActiveXObject || "ActiveXObject" in window
// var isEdge = userAgent.indexOf("Windows NT 6.1; Trident/7.0;") > -1 && !isIE; //whether IE的Edge浏览器
var isEdge = userAgent.indexOf("Edge") > -1; //whether IE Edge
var isFF = userAgent.indexOf("Firefox") > -1; //whether Firefox
var isSafari = userAgent.indexOf("Safari") > -1 && userAgent.indexOf("Chrome") == -1; //whether Safari
var isChrome = userAgent.indexOf("Chrome") > -1 && userAgent.indexOf("Safari") > -1&&!isEdge; //whether Chrome
console.log("isOpera?" + isOpera);
console.log("isIE?" + isIE);
console.log("isEdge?" + isEdge);
console.log("isFF?" + isFF);
console.log("isSafari?" + isSafari);
console.log("isChrome?" + isChrome);
if(isChrome) Sys.isChrome = true;
if(isIE) Sys.isIE = true;
return Sys;
}
function _getDownloadUrl(text) {
var BOM = "\uFEFF";
// Add BOM to text for open in excel correctly
if (window.Blob && window.URL && window.URL.createObjectURL) {
var csvData = new Blob([BOM + text], {
type: 'text/csv'
});
return URL.createObjectURL(csvData);
} else {
return 'data:attachment/csv;charset=utf-8,' + BOM + encodeURIComponent(text);
}
}
json2csv
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。