使用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 相关文章推荐
JQuery1.8 判断元素是否绑定事件的方法
Jul 10 Javascript
JavaScript实现数字数组正序排列的方法
Apr 06 Javascript
javascript弹出窗口实现代码
Nov 12 Javascript
JavaScript中的原型prototype完全解析
May 10 Javascript
JavaScript 对象字面量讲解
Jun 06 Javascript
利用js编写响应式侧边栏
Sep 17 Javascript
基于Marquee.js插件实现的跑马灯效果示例
Jan 25 Javascript
xmlplus组件设计系列之图标(ICON)(1)
May 05 Javascript
分享vue里swiper的一些坑
Aug 30 Javascript
Angular8路由守卫原理和使用方法
Aug 29 Javascript
微信小程序实现星星评分效果
Nov 01 Javascript
使用javascript解析二维码的三种方式
Nov 11 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
2019年中国咖啡业现状与发展趋势
2021/03/04 咖啡文化
PHP+AJAX实现无刷新注册(带用户名实时检测)
2006/12/02 PHP
用PHP为SHOPEX增加日志功能代码
2010/07/02 PHP
php使用mb_check_encoding检查字符串在指定的编码里是否有效
2013/11/07 PHP
ThinkPHP框架实现session跨域问题的解决方法
2014/07/01 PHP
ThinkPHP文件上传实例教程
2014/08/22 PHP
laravel5.4利用163邮箱发送邮件的步骤详解
2017/09/22 PHP
零基础php编程好学吗
2019/10/11 PHP
JavaScript TO HTML 转换
2006/06/26 Javascript
映彩衣的js随笔(js图片切换效果)
2011/07/31 Javascript
jquery ajax对特殊字符进行转义防止js注入使用示例
2013/11/21 Javascript
Jquery实现控件的隐藏和显示实例
2014/02/08 Javascript
使用jQuery判断IE浏览器版本的代码
2014/06/14 Javascript
浅谈JS日期(Date)处理函数
2014/12/07 Javascript
jQuery中add()方法用法实例
2015/01/08 Javascript
JQuery使用$.ajax和checkbox实现下次不在通知功能
2015/04/16 Javascript
BootStrap中Datetimepicker和uploadify插件应用实例小结
2016/05/26 Javascript
手机图片预览插件photoswipe.js使用总结
2016/08/25 Javascript
详解Vue路由History mode模式中页面无法渲染的原因及解决
2017/09/28 Javascript
vue form check 表单验证的实现代码
2018/12/09 Javascript
vue插件mescroll.js实现移动端上拉加载和下拉刷新
2019/03/07 Javascript
python使用webbrowser浏览指定url的方法
2015/04/04 Python
Python的Flask框架中Flask-Admin库的简单入门指引
2015/04/07 Python
利用Python实现在同一网络中的本地文件共享方法
2018/06/04 Python
用Python将结果保存为xlsx的方法
2019/01/28 Python
Pycharm2020.1安装无法启动问题即设置中文插件的方法
2020/08/07 Python
css3实例教程 一款纯css3实现的环形导航菜单
2014/10/20 HTML / CSS
意大利男装网店:Vrients
2019/05/02 全球购物
Pureology官网:为染色头发打造最好的产品
2019/09/13 全球购物
法国床上用品商店:La Compagnie du lit
2019/12/26 全球购物
JAVA和C++的区别
2013/10/06 面试题
招股说明书范本
2014/05/06 职场文书
教育实践活动对照检查材料
2014/09/23 职场文书
医院消毒隔离制度
2015/08/05 职场文书
2016干部作风整顿心得体会
2016/01/22 职场文书
解决SpringCloud Feign传对象参数调用失败的问题
2021/06/23 Java/Android