节点JS获取CSV

时间:2021-05-24 15:07:41

标签: node.js

我有一个带有 Node JS 的项目,我正在使用 JSON 模块收集 httpnode-fetch 信息。

这是我发现的异步使用node-fetch模块的方式,如果有可能改进这个功能,添加建议,我是这个模块的新手。

这是我阅读信息的code

const fetch = require('node-fetch');

(async () => {
    try {
        const res = await fetch('https://jsonplaceholder.typicode.com/users');
        const headerDate = res.headers && res.headers.get('date') ? res.headers.get('date') : 'no response date';

        const users = await res.json();
        for(user of users) {
        console.log(`Got user with id: ${user.id}, name: ${user.name}`);
        }
    } catch (err) {
        console.log(err.message); //can be console.error
    }
})();

我的问题:如何将所有信息提取到具有行数限制的 CSV 中?也就是说,CSV 的限制为 10 行(限制可能会有所不同),如果JSON 信息占用 30 行,将创建 3 个 CSV 来存储所有信息。我已经添加了 json-2-csv 模块,但我不知道如何使用它,或者这个模块是否是必要的或其他更好的东西。

2 个答案:

答案 0 :(得分:1)

const { Parser } = require("json2csv");
const fetch = require("node-fetch");
const fs = require("fs");

const csvLimit = 3;

const getJson = async () => {
  const response = await fetch("https://jsonplaceholder.typicode.com/users");
  const responseJson = await response.json();
  return responseJson;
};

const jsonToCsv = async () => {
  const json = await getJson();
  const json2csvParser = new Parser();
  let i = 0,
    j = 0;
  while (j < json.length) {
    let csv = [];
    let temp = [];
    for (j = i * csvLimit; j < (i + 1) * csvLimit; j++) {
      temp.push(json[j]);
    }
    csv.push(json2csvParser.parse(temp));
    fs.writeFileSync(`file${(i * csvLimit) / 3}.csv`, csv);
    i++;
  }
};

jsonToCsv();

如果您只需要 csv 文件中的特定字段,那么您可以通过这种方式将字段作为参数传递。

const json2csvParser = new Parser({fields})

答案 1 :(得分:0)

我使用 flat 包从 JSON 的第一条记录的键中提取字段名称,然后使用 json-2-csv 包将 JSON 转换为 {{1} }.

CSV

这是在 Excel 中打开的文件之一。 enter image description here