在 Node JS 中将外部 JSON 转换为 CSV
Convert an external JSON to a CSV in Node JS
我正在用 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();
我在一个文件中存储了 URL,其中信息在 JSON 中,我用变量 (url
) 读取它,我如何从中下载信息URL 保存在最多 999 行的 CSV 文件中并保存在 src / output
?
您可以使用 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();
我正在用 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();
我在一个文件中存储了 URL,其中信息在 JSON 中,我用变量 (url
) 读取它,我如何从中下载信息URL 保存在最多 999 行的 CSV 文件中并保存在 src / output
?
您可以使用 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();