【问题标题】:Convert a JSON to CSV in Node JS在 Node JS 中将 JSON 转换为 CSV
【发布时间】:2021-06-06 09:57:39
【问题描述】:

我开始研究Node JS,我正在尝试将外部JSON 文件转换为CSV 格式。

我要实现的操作如下:在一个内部文件中,我有两个 url,每个都指向一个外部 JSON(api1 和 api2),给定 url http://localhost:3000/?api=api1,你必须下载 @987654324 @ 的api1 CSV 格式,最多 50 行。

这是我到目前为止的代码(我添加了一些我认为是必要的模块):

import { Request, Response } from 'express';

const converter = require("json-2-csv");
const fetch = require("node-fetch");
const fs = require("fs");
const flatten = require('flat');

const conf = require(`../conf/${process.env.NODE_ENV}.json`);
const maxRecords = 50;

class IndexController {
  public async index(req: Request, res: Response) {
    const api =req.query.api; //api1
    const url = conf.API_MOCS[`${api}`].url; //https://mock.com/api1

    const csvWriter = createCsvWriter({
    path: 'path/to/file.csv',
    header: [
        {id: 'index', title: 'Index'},
        {id: 'index_start_at', title: 'Index start'},
        {id: 'integer', title: 'Integer'},
        {id: 'float', title: 'Float'},
        {id: 'name', title: 'Name'}
    ]
});

fetch(url)
  .then(res => res.json())
  .then(json => csvWriter.writeRecords(json.myItems));
  }
}
export const indexController = new IndexController(); 

这是我的内部文件,其中包含 JSON 的 url:

{
  "API_MOCS": {
    "api1": {
      "url": "https://mock.com/api1"
    },
    "api2": {
      "url": "https://mock.com/api2"
    }
  }
}

【问题讨论】:

    标签: node.js typescript api json2csv


    【解决方案1】:

    您应该首先从 URL 中“获取”json。有很多库可以帮助您解决这个问题。看一眼: https://www.npmjs.com/package/node-fetchhttps://www.npmjs.com/package/axios

    然后您可以编写 CSV 文件。我也建议为此使用库。首发:https://www.npmjs.com/package/csv-writer

    import { Request, Response } from 'express';
    
    const fetch = require("node-fetch");
    const createCsvWriter = require('csv-writer').createObjectCsvWriter;
    
    const conf = require(`../conf/${process.env.NODE_ENV}.json`);
    const maxRecords = 50;
    
    class IndexController {
      public async index(req: Request, res: Response) {
        const api =req.query.api; //api1
        const url = conf.API_MOCS[`${api}`].url; //https://mock.com/api1
        const csvWriter = createCsvWriter({
          path: 'path/to/file.csv',
          header: [
            {id: 'name', title: 'NAME'},
            {id: 'lang', title: 'LANGUAGE'}
          ]
        });
    
        fetch(url)
          .then(res => res.json())
          .then(json => csvWriter.writeRecords(json.myItems));
      }
    }
    export const indexController = new IndexController(); 
    

    【讨论】:

    • 是的,我在问题中已经安装了 node-fetch 和 fs 模块。我的问题是不知道怎么跟,怎么读取JSON并下载成CSV格式?
    • 我为你添加了一个例子
    • 它显示了以下错误:TypeError: Cannot convert undefined or null to object。我已经更新了问题
    • +1 建议为 CSV 处理提供完全调试的库。 CSV 看起来很简单,但它有很多小怪癖,重新发现它们并没有太大的价值。
    • 您是在 csv-writer 模块中还是在此之前收到此类型错误?如果没有 API 的示例输出,就很难重现。你能提供吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-11
    • 2013-08-17
    • 2021-08-28
    • 2016-07-27
    • 2020-07-23
    • 2020-09-23
    • 1970-01-01
    相关资源
    最近更新 更多