Node.js에서 CSV를 JSON으로 변환하는 방법
csv 파일을 json으로 변환하려고 합니다.사용하고 있습니다.
CSV의 예:
a,b,c,d
1,2,3,4
5,6,7,8
...
원하는 JSON:
{"a": 1,"b": 2,"c": 3,"d": 4},
{"a": 5,"b": 6,"c": 7,"d": 8},
...
node-csv 파서 라이브러리를 시도했습니다.하지만 출력은 기대했던 것과 달리 배열과 같습니다.
Node 0.8 및 express.js를 사용하고 있는데, 이를 쉽게 수행할 수 있는 방법을 알려 주십시오.
Node.js 모듈은 포괄적인 nodejs csv 파서입니다.node.js 앱 라이브러리/커맨드라인 툴/브라우저로 사용할 수 있습니다.browserify
★★★★★★★★★★★★★★★★★」webpack
.
소스 코드는 https://github.com/Keyang/node-csvtojson 에서 찾을 수 있습니다.
메모리 소비량이 적은 고속이지만 풍부한 API와 읽기 쉬운 문서를 통해 모든 해석 요구를 지원할 수 있습니다.
자세한 내용은 여기를 참조하십시오.
다음은 몇 가지 코드 예입니다.
Node.js 응용 프로그램에서 라이브러리로 사용합니다(csvtojson@2.0.0 +:
- 를 사용하여 합니다.
npm
npm install --save csvtojson@latest
- node.js 앱에서 사용합니다.
// require csvtojson
var csv = require("csvtojson");
// Convert a csv file with csvtojson
csv()
.fromFile(csvFilePath)
.then(function(jsonArrayObj){ //when parse finished, result will be emitted here.
console.log(jsonArrayObj);
})
// Parse large csv with stream / pipe (low mem consumption)
csv()
.fromStream(readableStream)
.subscribe(function(jsonObj){ //single json object will be emitted for each csv line
// parse each json asynchronousely
return new Promise(function(resolve,reject){
asyncStoreToDb(json,function(){resolve()})
})
})
//Use async / await
const jsonArray=await csv().fromFile(filePath);
명령줄 도구로 사용합니다.
sh# npm install csvtojson
sh# ./node_modules/csvtojson/bin/csvtojson ./youCsvFile.csv
-혹은...
sh# npm install -g csvtojson
sh# csvtojson ./yourCsvFile.csv
고급 사용:
sh# csvtojson --help
자세한 내용은 위의 github 페이지에서 확인할 수 있습니다.
언더스코어.js를 사용할 수 있습니다.
먼저 toArray 함수를 사용하여 어레이 내의 행을 변환합니다.
var letters = _.toArray(a,b,c,d);
var numbers = _.toArray(1,2,3,4);
다음으로 오브젝트 함수를 사용하여 어레이를 오브젝트화합니다.
var json = _.object(letters, numbers);
그러면 json var에는 다음과 같은 것이 포함됩니다.
{"a": 1,"b": 2,"c": 3,"d": 4}
비슷한 일을 해야 했는데 이게 도움이 됐으면 좋겠군
// Node packages for file system
var fs = require('fs');
var path = require('path');
var filePath = path.join(__dirname, 'PATH_TO_CSV');
// Read CSV
var f = fs.readFileSync(filePath, {encoding: 'utf-8'},
function(err){console.log(err);});
// Split on row
f = f.split("\n");
// Get first row for column headers
headers = f.shift().split(",");
var json = [];
f.forEach(function(d){
// Loop through each row
tmp = {}
row = d.split(",")
for(var i = 0; i < headers.length; i++){
tmp[headers[i]] = row[i];
}
// Add object to list
json.push(tmp);
});
var outPath = path.join(__dirname, 'PATH_TO_JSON');
// Convert object to string, write json to file
fs.writeFileSync(outPath, JSON.stringify(json), 'utf8',
function(err){console.log(err);});
여기에서는 별도의 모듈을 필요로 하지 않는 솔루션을 소개합니다.단, 매우 조잡하고 에러 처리를 많이 실시하지 않습니다.그것은 또한 더 많은 테스트를 필요로 할 수도 있지만, 그것은 당신을 계속하게 할 것이다.대용량의 파일을 해석하는 경우는, 다른 방법을 찾을 수 있습니다.또한 Ben Nadel의 솔루션을 참조하십시오.
노드 모듈 코드, csv2json.js:
/*
* Convert a CSV String to JSON
*/
exports.convert = function(csvString) {
var json = [];
var csvArray = csvString.split("\n");
// Remove the column names from csvArray into csvColumns.
// Also replace single quote with double quote (JSON needs double).
var csvColumns = JSON
.parse("[" + csvArray.shift().replace(/'/g, '"') + "]");
csvArray.forEach(function(csvRowString) {
var csvRow = csvRowString.split(",");
// Here we work on a single row.
// Create an object with all of the csvColumns as keys.
jsonRow = new Object();
for ( var colNum = 0; colNum < csvRow.length; colNum++) {
// Remove beginning and ending quotes since stringify will add them.
var colData = csvRow[colNum].replace(/^['"]|['"]$/g, "");
jsonRow[csvColumns[colNum]] = colData;
}
json.push(jsonRow);
});
return JSON.stringify(json);
};
Jasmine 테스트, csv2jsonSpec.js:
var csv2json = require('csv2json.js');
var CSV_STRING = "'col1','col2','col3'\n'1','2','3'\n'4','5','6'";
var JSON_STRING = '[{"col1":"1","col2":"2","col3":"3"},{"col1":"4","col2":"5","col3":"6"}]';
/* jasmine specs for csv2json */
describe('csv2json', function() {
it('should convert a csv string to a json string.', function() {
expect(csv2json.convert(CSV_STRING)).toEqual(
JSON_STRING);
});
});
명령줄 컨버터만 원하는 경우 가장 빠르고 깔끔한 솔루션은 npx를 통해 csvtojson을 사용하는 것입니다(기본값은 node.js에 포함되어 있습니다).
$ npx csvtojson ./data.csv > data.json
ES6 사용
const toJSON = csv => {
const lines = csv.split('\n')
const result = []
const headers = lines[0].split(',')
lines.map(l => {
const obj = {}
const line = l.split(',')
headers.map((h, i) => {
obj[h] = line[i]
})
result.push(obj)
})
return JSON.stringify(result)
}
const csv = `name,email,age
francis,francis@gmail.com,33
matty,mm@gmail.com,29`
const data = toJSON(csv)
console.log(data)
산출량
// [{"name":"name","email":"email","age":"age"},{"name":"francis","email":"francis@gmail.com","age":"33"},{"name":"matty","email":"mm@gmail.com","age":"29"}]
lodash 사용:
function csvToJson(csv) {
const content = csv.split('\n');
const header = content[0].split(',');
return _.tail(content).map((row) => {
return _.zipObject(header, row.split(','));
});
}
csv 패키지 https://npmjs.org/package/csv는 사용해 본 적이 없습니다만, 메뉴얼에 의하면, 고품질의 실장이라고 생각됩니다.http://www.adaltas.com/projects/node-csv/
처음에는 node-csvtojson으로 시작했는데 링크에 대한 의존관계가 너무 많았습니다.
당신의 질문과 brnd의 답변을 바탕으로 node-csv와 underscore.js를 사용했습니다.
var attribs;
var json:
csv()
.from.string(csvString)
.transform(function(row) {
if (!attribs) {
attribs = row;
return null;
}
return row;
})
.to.array(function(rows) {
json = _.map(rows, function(row) {
return _.object(attribs, row);
});
});
csvtojson 모듈을 사용하여 콘솔의 csv에서 json을 인쇄하는 매우 간단한 솔루션이 있습니다.
// require csvtojson
var csv = require("csvtojson");
const csvFilePath='customer-data.csv' //file path of csv
csv()
.fromFile(csvFilePath)``
.then((jsonObj)=>{
console.log(jsonObj);
})
CSV 문자열을 json 어레이로 변환하기 위해 csvtojson 라이브러리를 사용했습니다.JSON으로의 변환에 도움이 되는 다양한 기능을 갖추고 있습니다.
또한 파일 및 파일 스트리밍에서 읽을 수도 있습니다.
쉼표() 또는 다른 구분 기호를 포함할 수 있는 csv를 구문 분석할 때는 주의하십시오. 구분 기호를 제거하려면 여기를 참조하십시오.
순서 1:
노드 모듈 설치: npm install csvtojson --save
순서 2:
var Converter = require("csvtojson").Converter;
var converter = new Converter({});
converter.fromFile("./path-to-your-file.csv",function(err,result){
if(err){
console.log("Error");
console.log(err);
}
var data = result;
//to check json
console.log(data);
});
모든 BI 처리에 Node-ETL 패키지로 충분합니다.
npm install node-etl;
그 후, 다음과 같이 합니다.
var ETL=require('node-etl');
var output=ETL.extract('./data.csv',{
headers:["a","b","c","d"],
ignore:(line,index)=>index!==0, //ignore first line
});
나와 내 친구는 이런 종류의 일을 처리하기 위해 웹 서비스를 만들었다.
단일 RESTful 콜에서 CSV를 JSON으로 변환하는 방법에 대해서는, Modifly.co 를 참조해 주세요.
csv 파서 라이브러리를 사용하세요.사용 방법에 대해서는, 여기를 참조해 주세요.
var csv = require('csv');
csv.parse(csvText, {columns: true}, function(err, data){
console.log(JSON.stringify(data, null, 2));
});
npm install csvjson --save
노드 내 JS 파일
const csvjson = require('csvjson');
convertCSVToJSON(*.csv);
convertCSVToJSON = (file) => {
const convertedObj = csvjson.toObject(file);
}
csvtojson 모듈은 csv를 json 또는 열 어레이로 변환하는 포괄적인 nodejs csv 파서입니다.node.js 라이브러리 / 명령줄 도구 / 또는 브라우저에서 사용할 수 있습니다.다음은 몇 가지 기능입니다.
/** csv file
a,b,c
1,2,3
4,5,6
*/
const csvFilePath='<path to csv file>'
const csv=require('csvtojson')
csv()
.fromFile(csvFilePath)
.then((jsonObj)=>{
console.log(jsonObj);
/**
* [
* {a:"1", b:"2", c:"3"},
* {a:"4", b:"5". c:"6"}
* ]
*/
})
// Async / await usage
const jsonArray=await csv().fromFile(csvFilePath);
csvtojson 모듈을 설치하고 다음 코드를 사용하여 큰 (315 MB) csv 파일을 json으로 변환했습니다.
const fs = require('fs')
const Converter = require('csvtojson').Converter
const csvConverter = new Converter({
constructResult:false,
downstreamFormat:"array",
})
csvConverter.subscribe=function(json,row,index){
json["rowIndex"]=index
};
const readStream = fs.createReadStream('./data.csv') // my csv file
const writeStream = fs.createWriteStream('./data.json') // my new json file
readStream.pipe(csvConverter).pipe(writeStream)
결과 json 파일은 원하는 형식입니다.
[
{"a": 1,"b": 2,"c": 3,"d": 4},
{"a": 5,"b": 6,"c": 7,"d": 8},
]
CSV 데이터를 2개의 치수 어레이로 구성하는 방법을 파악했습니다.
[['header1','header2'],['data1','data2']]
json으로 변환은 간단히 매핑되고 축소됩니다.
const keys = input[0]
const jsonOutput = input.slice(1)
.map(arr2 => keys.reduce((accumulator, element, index) => {
return { ...accumulator,
[element]: arr2[index]
};
}, {}))
제 경우 파일이 너무 커서 JSON.stringify는 도움이 되지 않았습니다.이것으로 내 욕구가 해결되었다.
let csvFile = fs.readFileSync(
csvFilePath,
{ encoding: "utf-8" },
function (err) {
console.log(err);
}
);
csvFile = csvFile.split("\n");
let strFile = "export default [";
csvFile.forEach(function (d) {
let row = d.split(",");
strFile += `[${row}],`;
});
strFile += "]";
언급URL : https://stackoverflow.com/questions/16831250/how-to-convert-csv-to-json-in-node-js
'programing' 카테고리의 다른 글
어떤 걸로 할까요?org.json의 JSONObject VS javax.json의 JsonObject (0) | 2023.03.21 |
---|---|
Response setState가 업데이트되지 않음 (0) | 2023.03.21 |
ng-max-length가 내 모델을 나사로 고정합니다. (0) | 2023.03.21 |
기능을 통해 자동으로 새 사용자를 생성합니다.WordPress의 php (0) | 2023.03.16 |
제품 카테고리에 사용자 정의 필드 추가 (0) | 2023.03.16 |