0

我目前正在尝试从 API 中提取 json 数据,使用 json2csv node.js 模块将其转换为 csv,然后将数据作为 csv 文件保存在我的笔记本电脑上。但是,当我运行脚本时,什么也没有发生。

然后,json 数据的格式类似于以下数据变量:

const apiDataPull = postDataRequest()
   .then(data => {
      data = [
         {
            'day': '*date*',
            'revenue': '*revenue value*'
         }
      ]

这是将数据转换为csv并下载它,这似乎是问题出现的地方:

apiDataPull.then(data => {

   json2csv({
      data: data,
      fields: ['day', 'revenue', 'totalImpressions', 'eCPM']
   },
   function(err, csv) {
      if (err) console.log(err);
      fs.writeFile('pubmaticData.csv', csv, function(err){
         if (err) throw err;
         console.log('File Saved!')
      });
   });

});

从 API 中提取了数据,但没有保存。我什至不确定它是否已正确转换为 csv。

4

2 回答 2

1

你可以使用这个 npm 包 - csv-stringify。 https://github.com/adaltas/node-csv-stringify

//Load HTTP module
const http = require("http");
var stringify = require('csv-stringify');
const fs = require('fs');
const hostname = '127.0.0.1';
const port = 3000;
//Create HTTP server and listen on port 3000 for requests
const server = http.createServer(async (req, res) => {        
stringify(jsonObject, {header:true}, function(err, output) {
        fs.writeFile('formatted_json.csv', output, 'utf8', function(err) {
            if (err) {
                console.log('Some error occured - file either not saved or corrupted file saved.');
            } else {
                console.log('It\'s saved!');
            }
        });
    });

});

//listen for request on port 3000, and as a callback function have the port listened on logged
server.listen(port, hostname, () => {
    console.log(`Server running at http://${hostname}:${port}/`);
});

这应该可以帮助你。创建这个文件 - 将它命名为 index.js 确保你已经安装了 node 和 npm,并在同一个目录中运行

npm install
npm install csv-stringify
node index.js

转到您的浏览器打开 localhost:3000,您将看到在 index.js 所在的同一目录中创建了 formatted_json.csv。希望这可以帮助!

于 2020-04-02T05:11:28.880 回答
0

您可能没有开始承诺,而且看起来您没有正确使用 json2csv。

看看这个例子:

let json2csv = require("json2csv");
let fs = require("fs");

apiDataPull = Promise.resolve([
    {
        'day': '*date*',
        'revenue': '*revenue value*'
    }]).then(data => {
    return json2csv.parseAsync(data, {fields: ['day', 'revenue', 'totalImpressions', 'eCPM']})
}).then(csv => {
    fs.writeFile('pubmaticData.csv', csv, function (err) {
        if (err) throw err;
        console.log('File Saved!')
    });
});

保存的文件是:

"day","revenue","totalImpressions","eCPM"
"*date*","*revenue value*",,
于 2020-04-02T04:42:34.790 回答