如何将数据写入一个csv文件?

问题描述

我目前正在尝试将Firebase中的数据写入csv文件。可以,但是我得到了三个不同的文件,我不知道该如何解决在这个时候我感到非常困惑。

您对如何解决此问题有任何想法吗?

这是我的JSON:

{
  "records" : {
    "id1" : {
      "2020-08-11 15:40:13" : {
        "0" : "5"
      },"2020-08-11 16:35:09" : {
        "0" : "18"
      }
    },"id2" : {
      "2020-08-11 17:23:34" : {
        "0": "5"
      }
    },"id3" : {
      "2020-08-11 09:38:53" : {
        "0": "4"
      }
    },"id4" : {
      "2020-08-11 13:41:30" : {
        "0": "2"
      },"2020-08-11 13:41:44" : {
        "0": "3"
      }
    }
  }
}


基本上,我想获取所有id并将其写入csv文件的列中。 “测试”条目只是其他数据条目的占位符。

这是我到目前为止所拥有的:

function downloadData(){
    var db = firebase.database().ref();
    var dbRef = db.child('records');
    
    dbRef.once('value',function(snapshot) {
        snapshot.forEach(function(childSnapshot) {
            var childKey = childSnapshot.key;
            var b = [childKey,'iwannasleep'];
            // console.log(childKey); 
            // console.log(b);

            var data = [b];
            console.log(data);



// ------------- export into csv ---------------


            var arrayHeader = ["user_id","test"] 

            var csv = arrayHeader.join(',') + '\n';
            data.forEach( function(row) {
                csv += row.join(',');
                csv += "\n";
            });
        
            console.log(csv);

            var hiddenElement = document.createElement('a');
            hiddenElement.href = 'data:text/csv;charset=utf-8,' + encodeURI(csv);;
            hiddenElement.target = '_blank';
            hiddenElement.download = 'data.csv';
            hiddenElement.click();
        
        });
      });
}

解决方法

正如RobIII所说,您正在for循环内 中创建一个下载链接,这意味着您正在为每一行数据创建一个单独的元素。

您需要将其拉出循环:

var db = firebase.database().ref();
var dbRef = db.child('dataRecordings');

dbRef.once('value',function(snapshot) {
    var arrayHeader = ["user_id","test"] 
    var csv = arrayHeader.join(',') + '\n';

    snapshot.forEach(function(childSnapshot) {
        var childKey = childSnapshot.key;
        var b = [childKey,'iwannasleep'];

        var data = [b];

        data.forEach(function(row) {
            csv += row.join(',');
            csv += "\n";
        });    
    });
    var hiddenElement = document.createElement('a');
    hiddenElement.href = 'data:text/csv;charset=utf-8,' + encodeURI(csv);;
    hiddenElement.target = '_blank';
    hiddenElement.download = 'data.csv';
    hiddenElement.click();
});

更新:有关您的问题中的JSON的示例:

const json = {
  "records" : {
    "id1" : {
      "2020-08-11 15:40:13" : {  "0" : "5" },"2020-08-11 16:35:09" : { "0" : "18" }
    },"id2" : {
      "2020-08-11 17:23:34" : { "0": "5" }
    },"id3" : {
      "2020-08-11 09:38:53" : { "0": "4" }
    },"id4" : {
      "2020-08-11 13:41:30" : { "0": "2" },"2020-08-11 13:41:44" : { "0": "3" }
    }
  }
}

var arrayHeader = ["user_id","test"] 
var csv = arrayHeader.join(',') + '\n';

Object.keys(json.records).forEach((childKey) => {
    var b = [childKey,'iwannasleep'];

    var data = [b];

    data.forEach(function(row) {
        csv += row.join(',');
        csv += "\n";
    });    
});

console.log(csv);