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


Posted in Javascript onJanuary 09, 2015

摘要:

最近有一个非项目的小需求,就是将项目开发分工文件化,方便后期管理维护。但是开发时,分工安排都是以json格式记录的,所以就做了一个将json数据以csv格式下载到本地。

代码:

<!DOCTYPE html>

<html>

    <title>download csv</title>

    <head>

        <script src="http://code.jquery.com/jquery-1.11.0.min.js"></script>

        <script type="text/javascript" src="download.js"></script>

    </head>

    <body>

        <div align="center">

            <h3><u>Enter JSON data</u></h3>

            <div class='mydiv'>

                    <textarea id="txt" class='txtarea' rows="15" cols="100">[{"Vehicle":"BMW","Date":"30 Jul 2013 09:24 AM","Location":"Hauz Khas","Speed":42},{"Vehicle":"Honda CBR","Date":"30 Jul 2013 12:00 AM","Location":"Military Road","Speed":0},{"Vehicle":"Supra","Date":"30 Jul 2013 07:53 AM","Location":"Sec-45","Speed":58},{"Vehicle":"Land Cruiser","Date":"30 Jul 2013 09:35 AM","Location":"DLF Phase I","Speed":83}]</textarea>

            </div>

            <br/>

            <button class="download">Download CSV</button>

        </div>

    </body>

</html>

download.js

$(document).ready(function() {

    "use strict";

    var mo = {

        init: function() {

            $('.download').click(function() {

                var data = $('#txt').val();

                if (data === '') {

                    return;

                }

                mo.JSONToCSVConvertor(data, true);

            });

        },

        JSONToCSVConvertor: function(JSONData, ShowLabel) {

            var arrData = typeof JSONData !== 'object' ? JSON.parse(JSONData) : JSONData;

            var CSV = '';

            if (ShowLabel) {

                var row = "";

                for (var index in arrData[0]) {

                    row += index + ',';

                }

                row = row.slice(0, -1);

                CSV += row + '\r\n';

            }

            for (var i = 0; i < arrData.length; i++) {

                var row = "";

                for (var index in arrData[i]) {

                    var arrValue = arrData[i][index] == null ? "" : '="' + arrData[i][index] + '"';

                    row += arrValue + ',';

                }

                row.slice(0, row.length - 1);

                CSV += row + '\r\n';

            }

            if (CSV == '') {

                growl.error("Invalid data");

                return;

            }

            var fileName = "Result";

            if (mo.msieversion()) {

                var IEwindow = window.open();

                IEwindow.document.write('sep=,\r\n' + CSV);

                IEwindow.document.close();

                IEwindow.document.execCommand('SaveAs', true, fileName + ".csv");

                IEwindow.close();

            } else {

                var uri = 'data:application/csv;charset=utf-8,' + escape(CSV);

                var link = document.createElement("a");

                link.href = uri;

                link.style = "visibility:hidden";

                link.download = fileName + ".csv";

                document.body.appendChild(link);

                link.click();

                document.body.removeChild(link);

            }

        },

        msieversion: function() {

            var ua = window.navigator.userAgent;

            var msie = ua.indexOf("MSIE ");

            if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) // If Internet Explorer, return version number 

            {

                return true;

            } else { // If another browser, 

                return false;

            }

            return false;

        },

        main: function() {

            mo.init();

        }

    };

    mo.main();

});

小结:

注意json格式[{},{}],文件名是在js中定义的变量fileName。主要问题是他会自动添加一行空行,且每个元素都会在值前面加个'='。

下载下来的数据格式为:

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

Javascript 相关文章推荐
js文件中调用js的实现方法小结
Oct 23 Javascript
用jquery实现学校的校历(asp.net+jquery ui 1.72)
Jan 01 Javascript
JavaScript利用append添加元素报错的解决方法
Jul 01 Javascript
jQuery实现鼠标悬停背景翻转的黑色导航菜单代码
Sep 14 Javascript
在JavaScript中模拟类(class)及类的继承关系
May 20 Javascript
jQuery实现动态添加tr到table的方法
Dec 26 Javascript
seajs实现强制刷新本地缓存的方法分析
Oct 16 Javascript
在一个页面实现两个zTree联动的方法
Dec 20 Javascript
代码详解Vuejs响应式原理
Dec 20 Javascript
bootstrap中selectpicker下拉框使用方法实例
Mar 22 Javascript
浅谈react性能优化的方法
Sep 05 Javascript
在 Vue 中编写 SVG 图标组件的方法
Feb 24 Javascript
js读取csv文件并使用json显示出来
Jan 09 #Javascript
微信JS接口汇总及使用详解
Jan 09 #Javascript
推荐一款jQuery插件模板
Jan 09 #Javascript
JavaScript中Cookie操作实例
Jan 09 #Javascript
使用javascript实现简单的选项卡切换
Jan 09 #Javascript
14个有用的Jquery技巧分享
Jan 08 #Javascript
jQuery中insertBefore()方法用法实例
Jan 08 #Javascript
You might like
PHP魔术引号所带来的安全问题分析
2014/07/15 PHP
php绘图之生成饼状图的方法
2015/01/24 PHP
又拍云异步上传实例教程详解
2016/04/19 PHP
Symfony2获取web目录绝对路径、相对路径、网址的方法
2016/11/14 PHP
PHP中关键字interface和implements详解
2017/06/14 PHP
PHP提取字符串中的手机号正则表达式怎么写
2017/07/17 PHP
PHP编程实现脚本异步执行的方法
2017/08/09 PHP
5 cool javascript apps
2007/03/24 Javascript
jquery $(this).attr $(this).val方法使用介绍
2013/10/08 Javascript
js打开windows上的可执行文件示例
2014/05/27 Javascript
jQuery插件slick实现响应式移动端幻灯片图片切换特效
2015/04/12 Javascript
JavaScript 函数的执行过程
2016/05/09 Javascript
jQuery表单插件ajaxForm实例详解
2017/01/17 Javascript
nodejs集成sqlite使用示例
2017/06/05 NodeJs
vue底部加载更多的实例代码
2018/06/29 Javascript
详解ES6中的 Set Map 数据结构学习总结
2018/11/06 Javascript
解决Vue 刷新页面导航显示高亮位置不对问题
2019/12/25 Javascript
记录微信小程序 height: calc(xx - xx);无效问题
2019/12/30 Javascript
解决vue prop传值default属性如何使用,为何不生效的问题
2020/09/21 Javascript
Vue实现一种简单的无限循环滚动动画的示例
2021/01/10 Vue.js
javascript实现固定侧边栏
2021/02/09 Javascript
[54:54]Newbee vs Serenity 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
python抓取网页时字符集转换问题处理方案分享
2014/06/19 Python
Python3实现定时任务的四种方式
2019/06/03 Python
python实现在函数图像上添加文字和标注的方法
2019/07/08 Python
python 子类调用父类的构造函数实例
2020/03/12 Python
html5绘制时钟动画
2014/12/15 HTML / CSS
HTML5实现移动端点击翻牌功能
2020/10/23 HTML / CSS
办公室文秘自我评价
2013/09/21 职场文书
期末自我鉴定
2014/02/02 职场文书
开学典礼演讲稿
2014/05/23 职场文书
关于晚自习早退的检讨书
2014/09/13 职场文书
群众路线教育实践活动对照检查材料思想汇报(副处级领导)
2014/10/04 职场文书
法律进社区活动总结
2015/05/07 职场文书
Go语言的协程上下文的几个方法和用法
2022/04/11 Golang
Golang并发工具Singleflight
2022/05/06 Golang