【问题标题】:Convert an external JSON to a CSV in Node JS在 Node JS 中将外部 JSON 转换为 CSV
【发布时间】:2021-06-05 18:31:35
【问题描述】:

我正在使用 Node JS 和 Typescript 创建一个项目,我想在其中下载一个 CSV,其中包含 API 包含的 JSON 格式的信息。给定 url http://localhost:3000/?api=api1,我必须阅读与 api1 相关的 JSON。

我已经添加了我看到的必要模块,但我无法通过 url 从外部 JSON 下载 CSV。

这是我的controller

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(`../config/${process.env.NODE_ENV}.json`);
    
class IndexController {
    public async index(req: Request, res: Response) {
        const api =req.query.api; //api1
        const url = conf.API_MOCS[`${api}`].url; //https://mocks.free.beeceptor.com/api1 

        const env = process.env.NODE_ENV;
        const nameFile = `${env}.${api}.csv`;

        let json = await axios.get(url);

        const header={
          'index':'Index',
          'integer':'Integer',
          'float': 'Float',
          'name': 'Name'};

        let json2csvCallback = function (err:any, csv:any) {
           if (err) throw err;
           const maxRecords = 50;
           const headers = csv.split('\n').slice(0,1);
           const records = csv.split('\n').slice(0,);
           for(let i=1; i<records.length; i=i+maxRecords) {
                let dataOut = headers.concat(records.slice(i, i+maxRecords)).join('\n');
                let id = Math.floor(i/maxRecords)+1;
                 fs.writeFileSync(`${dir}/${nameFile}.${id}.csv`, dataOut);
            }
        };

        converter.json2csv(json.data.items, json2csvCallback);
    }
}
export const indexController = new IndexController(); 

在一个文件中,我以 JSON 格式存储了信息的 URL,我使用变量 (url) 读取了该 URL,如何从该 URL 下载最多 999 行的 CSV 文件中的信息和保存在src / output

【问题讨论】:

    标签: node.js typescript json2csv


    【解决方案1】:

    您可以使用 axios 或请求调用该 url,在获得 JSON 响应后,您可以使用 https://www.npmjs.com/package/json2csv 将 JSON 转换为 csv。

    import { Request, Response } from 'express';
    const converter = require("json-2-csv");
    const fetch = require("node-fetch");
    const axios = require('axios');
    const fs = require("fs");
    const flatten = require('flat');
        
    const conf = require(`../config/${process.env.NODE_ENV}.json`);
        
    class IndexController {
        public async index(req: Request, res: Response) {
            const api =req.query.api; //api1
            const url = conf.API_MOCS[`${api}`].url; //https://mocks.free.beeceptor.com/api1 
            console.log("Getting JSON ...");
            let json = await axios.get("https://mocks.free.beeceptor.com/api1");
            console.log("JSON Fetched ...");
            const header={
            'index':'Index',
            'index_start_at':'Index start',
             'integer':'Integer',
            'float': 'Float',
            'name': 'Name'};
            converter.json2csv([header,...json.data.items], (err:any, csv:any) => {
                if (err) {
                     throw err;
                }
                console.log("Making CSV ...");
                fs.writeFileSync("file.csv",csv);
                console.log("CSV File Is Ready...");
    
             });    
        }
    }
    export const indexController = new IndexController(); 
    

    【讨论】:

    • 我已经使用 json-2-csv 和 node-fecth 模块来处理请求请求。但它向我显示了以下错误:Parameter 'err' implicitly has an 'any' type。和Parameter 'csv' implicitly has an 'any' type。我不知道这是否是正确的做法。
    • 嗨@menphis 快速查看这篇文章attacomsian.com/blog/nodejs-convert-json-to-csv,如果仍然没有成功,请告诉我我们可以为它编写手动代码。
    • 我已经看过那篇文章,但我无法让它工作,问题是它从内部文件获取 JSON,我正在尝试从外部 url 收集它
    • 如果你从外部 API 获取 JSON,那么你可以将它存储在一个变量中,然后你可以将包含 JSON 的变量传递给这个 NPM 模块的函数。
    • 但是我不知道如何存储JSON包含的信息,我只能将JSON所在的地址保存在url变量中
    猜你喜欢
    • 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
    相关资源
    最近更新 更多