原生js导出json为csv文件

// 定义必须参数并赋予测试数据
let data = [ // 真实数据需要与此测试数据格式保持一致。
	{name: '张三', url: 'https://www.baidu.com'},
	{name: '李四', url: 'https://www.baidu.com'},
	{name: '王五', url: 'https://www.baidu.com'},
	{name: '赵六', url: 'https://www.baidu.com'}
]
let header= {name: '姓名', url: '网址'}  // 表头

//数据处理, 这一部分可以封装为函数
data.unshift(header)  // 添加表头

// 处理数据为csv的格式
let csvString = ""
data.map(item => {
	Object.keys(header).map(key => {
		let value = item[key]
		csvString += value+','
	})
	csvString += '\r\n'
})


// 保存为csv文件并添加下载按钮 
//charset=utf-8,\ufeff + encodeURIComponent解决中文乱码
csvString = "data:application/csv;charset=utf-8,\ufeff" + encodeURIComponent(csvString)

//创建一个按钮
let btn = document.createElement('a');
btn.setAttribute("href", csvString);
btn.setAttribute("download", "data.csv");
btn.innerText = '下载'
// 定义一个修改元素样式的函数
function setStyle(dom, styles={}){
	Object.keys(styles).map(key => {
		dom.style[key] = styles[key]
	})
	return dom
}

// 设置按钮的样式
btn = setStyle(btn, {
	'position': 'fixed',
	'bottom': '20px',
	'right': '50px',
	'zIndex': '9999999999',
	'color':'white',
	'backgroundColor': 'red' // 注意的是,样式名不能有下划线,要合并在一起改为首字母大写列如:  background-color  =>  backgroundColor
})

document.body.appendChild(btn)

控制台运行代码会在页面右下角生成下载按钮,下载data.csv文件

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值