web-dev-qa-db-ja.com

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を使用していますが、これを簡単に実現する方法についての推奨事項が欲しいです。

54
Jetson John

Node.js csvtojson module は、包括的なnodejs csvパーサーです。 node.jsアプリライブラリ/コマンドラインツール/またはbrowserifyまたはwebpackの助けを借りてブラウザとして使用できます。

ソースコードは次の場所にあります。 https://github.com/Keyang/node-csvtojson

低メモリ消費で高速でありながら、豊富なAPIと読みやすいドキュメントで解析ニーズをサポートするのに強力です。

詳細なドキュメントは here にあります。

以下にコード例を示します。

Node.jsアプリケーションでライブラリとして使用([email protected] +):

  1. npmからインストールします

npm install --save csvtojson@latest

  1. 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ページから詳細を見つけることができます。

71
Keyang

nderscore.js を使用してみることができます

最初に toArray 関数を使用して配列の行を変換します:

var letters = _.toArray(a,b,c,d);
var numbers = _.toArray(1,2,3,4);

次に、 object 関数を使用して配列を一緒にオブジェクト化します。

var json = _.object(letters, numbers);

それまでに、json変数には次のようなものが含まれているはずです。

{"a": 1,"b": 2,"c": 3,"d": 4}
19
brnrd

個別のモジュールを必要としないソリューションを次に示します。ただし、それは非常に粗雑であり、多くのエラー処理を実装していません。より多くのテストを使用することもできますが、うまくいきます。非常に大きなファイルを解析している場合は、別の方法を探してください。また、これを参照してください 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);
};

ジャスミンテスト、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);
    });
});
11
Jess

同様のことをしなければならなかった、これが役立つことを願っています。

// 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);});
10
userFog

node-csvtojson で始めましたが、リンクするには依存関係が多すぎます。

あなたの質問と brndによる回答 に基づいて、 node-csvnderscore.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);
        });
     });
3
xverges

私はcsvパッケージ https://npmjs.org/package/csv を試していませんが、ドキュメントによると、それは品質の実装に見えます http://www.adaltas.com/projects/node-csv/

3

私は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);
})
2

Node-ETL パッケージはすべてのBI処理に十分です。

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
 });
2
Abdennour TOUMI

lodash を使用:

function csvToJson(csv) {
  const content = csv.split('\n');
  const header = content[0].split(',');
  return _.tail(content).map((row) => {
    return _.zipObject(header, row.split(','));
  });
}
2
theseadroid

Csv文字列をjson配列に変換するために csvtojson ライブラリを使用しました。 JSONに変換するのに役立つさまざまな機能があります。
ファイルからの読み取りおよびファイルストリーミングもサポートしています。

コンマ(、)またはその他の区切り文字を含むことができるcsvを解析するときは注意してください。区切り文字の削除については、私の答え こちら をご覧ください。

1
Supermacy

コマンドラインコンバーターだけが必要な場合、私にとって最も迅速で最もクリーンな解決策は、 csvtojson via npx (node.jsにデフォルトで含まれています)を使用することです

$ npx csvtojson ./data.csv > data.json

1
VanDavv

ステップ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);
});
0
Mohamed Sameer

csvパーサーライブラリ を使用します。使用方法について詳しく説明しています here

var csv = require('csv');
csv.parse(csvText, {columns: true}, function(err, data){
    console.log(JSON.stringify(data, null, 2));
});
0
ganqqwerty

私と私の仲間は、この種のことを処理するWebサービスを作成しました。

単一のRESTful呼び出しでCSVをJSONに変換する方法については、 Modifly.co をご覧ください。

0
Tim Alexander