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

how to write data into one csv file?

我目前正在尝试将数据从 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 文件的列中。 'test' 条目只是其他数据条目的占位符。

这是我目前的情况:

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 评论的那样,您正在创建一个下载 link inside 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);