Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何从JSON数据下载CSV文件?_Javascript_Json_Export To Csv - Fatal编程技术网

Javascript 如何从JSON数据下载CSV文件?

Javascript 如何从JSON数据下载CSV文件?,javascript,json,export-to-csv,Javascript,Json,Export To Csv,我是一个新手程序员。我想从过滤后的json数据中下载json数据,并将其保存到CSV文件中。这里是我的JSON API数据: 步骤应如下所示: 从日期选择器选择日期范围(例如:7-8日) 使用命令console.log(filteredData) 然后点击下载按钮,过滤后的数据(7-8月份的数据)将被下载 我可以做第一步和第二步。但是步骤3在我的代码中不起作用。有人能帮我写代码吗?目前,这是我的代码: $(函数(){ $('input[name=“datefilter”]”)。daterange

我是一个新手程序员。我想从过滤后的json数据中下载json数据,并将其保存到CSV文件中。这里是我的JSON API数据:

步骤应如下所示:

  • 从日期选择器选择日期范围(例如:7-8日)
  • 使用命令
    console.log(filteredData)
  • 然后点击下载按钮,过滤后的数据(7-8月份的数据)将被下载
  • 我可以做第一步和第二步。但是步骤3在我的代码中不起作用。有人能帮我写代码吗?目前,这是我的代码:

    $(函数(){
    $('input[name=“datefilter”]”)。daterangepicker({
    决战:没错,
    自动更新输入:false,
    区域设置:{
    取消标签:“清除”
    }
    });
    $('input[name=“datefilter”]')。on('apply.daterangepicker',函数(ev,picker){
    $(this.val(picker.startDate.format('YYYY-MM-DD')+'-'+picker.endDate.format('YYYY-MM-DD'));
    var startDate=picker.startDate.format('YYYY-MM-DD');
    var endDate=picker.endDate.format('YYYY-MM-DD');
    如果(开始日期!=''&&endDate!=''){
    console.log(开始日期、结束日期);
    var端点https://gmlews.com/api/data/?node_id=1';
    $.ajax({
    方法:“获取”,
    url:endpoint,
    数据:{
    开始日期:开始日期,
    结束日期:结束日期
    },
    成功:功能(数据){
    var数据=数据;
    让filteredData=389;.filter(数据,函数(数据){
    返回(data.timestamp>startDate&&
    data.timestamp
    代码中的问题是“filteredData”的变量引用之间存在简单的差异,因为它是在多个不同的范围中定义的,而在ajax调用之后,没有对主变量的全局引用。其次,在后面的部分中,
    #button1
    的onclick事件之间存在差异,只需定义一次。至少能够在选择日期后生成JSON字符串,而将其放入CSV文件并不重要,只需将数组映射到逗号分隔的值并将其字符串化即可。无论如何:

    $(函数(){
    $('input[name=“datefilter”]”)。daterangepicker({
    决战:没错,
    自动更新输入:false,
    区域设置:{
    取消标签:“清除”
    }
    });
    让我们过滤数据;
    $('input[name=“datefilter”]')。on('apply.daterangepicker',函数(ev,picker){
    $(this.val(picker.startDate.format('YYYY-MM-DD')+'-'+picker.endDate.format('YYYY-MM-DD'));
    var startDate=picker.startDate.format('YYYY-MM-DD');
    var endDate=picker.endDate.format('YYYY-MM-DD');
    如果(开始日期!=''&&endDate!=''){
    console.log(开始日期、结束日期);
    var端点https://gmlews.com/api/data/?node_id=1';
    $.ajax({
    方法:“获取”,
    url:endpoint,
    数据:{
    开始日期:开始日期,
    结束日期:结束日期
    },
    成功:功能(数据){
    var数据=数据;
    Filteredata=389;.filter(数据,函数(数据){
    返回(data.timestamp>startDate&&
    data.timestamp
    
    从日期开始的数据:
    单击此按钮可从节点1下载所有数据

    下载
    这应该可以:

    了解更多关于

    这是主要问题:

    var filteredData=filteredData;
    
    这是一个工作脚本

    我做了什么

  • 已删除按钮周围的document.ready,它已在document.ready中
  • 禁用该按钮,直到实际存在已过滤的数据
  • 从各地删除了Filteredata变量,使其成为一个全局变量
  • 查找JSON2的CDN
  • 创建了更好的csv转换器(引用字符串)
  • 删除下划线和JSON2
  • 让filteredData;
    const ConvertToCSV=数据=>{
    如果(!data | | data
    
    $(function() {
    
    $('input[name="datefilter"]').daterangepicker({
        showDropdowns : true,
    autoUpdateInput: false,
    locale: {
        cancelLabel: 'Clear'
    }
    });
    
    $('input[name="datefilter"]').on('apply.daterangepicker', function(ev, picker) {
    $(this).val(picker.startDate.format('YYYY-MM-DD') + ' - ' + picker.endDate.format('YYYY-MM-DD'));
    var startDate = picker.startDate.format('YYYY-MM-DD');
    var endDate = picker.endDate.format('YYYY-MM-DD');
    if (startDate != '' && endDate != '') {
          console.log(startDate, endDate);
          var endpoint = 'https://gmlews.com/api/data/?node_id=1';
    
    $.ajax({
    method: "GET",
    url: endpoint,
    data: {
    startDate: startDate,
    endDate: endDate
    },
    success: function(data){
    var data = data;
    let filteredData = _.filter(data, function(data){ 
    return (data.timestamp > startDate &&  
        data.timestamp < endDate)
    });
    console.log(filteredData);
    } //function(data)end
    }) //ajax end
    } //if function end
    
    $('input[name="datefilter"]').on('cancel.daterangepicker', function(ev, picker) {
    $(this).val('');
    });
    
    }); //apply button end
    //download button
    $("#button1").on('click', function(e) {
    // JSON to CSV Converter
        function ConvertToCSV(objArray) {
            var array = typeof objArray != 'object' ? JSON.parse(objArray) : objArray;
            var str = '';
    
            for (var i = 0; i < array.length; i++) {
                var line = '';
                for (var index in array[i]) {
                    if (line != '') line += ','
    
                    line += array[i][index];
                }
    
                str += line + '\r\n';
            }
    
            return str;
        }
    
        // Example
        $(document).ready(function () {
    
            // Create Object
            var filteredData = filteredData;
    
            // Convert Object to JSON
            var jsonObject = JSON.stringify(filteredData);
    
    
            // Convert JSON to CSV & Display CSV
            $('#button1').onclick(ConvertToCSV(jsonObject));
        });
    })
    
    }); //js function end