94 votes

Comment convertir CSV en JSON dans Node.js

J'essaie de convertir un fichier csv en fichier json. J'utilise .

Exemple CSV :

a,b,c,d
1,2,3,4
5,6,7,8
...

JSON souhaité :

{"a": 1,"b": 2,"c": 3,"d": 4},
{"a": 5,"b": 6,"c": 7,"d": 8},
...

J'ai essayé la bibliothèque node-csv parser, mais le résultat ressemble à un tableau et non à ce que j'attendais.

J'utilise Node 0.8 et express.js et j'aimerais avoir une recommandation sur la façon d'accomplir cela facilement.

6voto

francis Points 235

Utiliser 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)

Sortie

// [{"name":"name","email":"email","age":"age"},{"name":"francis","email":"francis@gmail.com","age":"33"},{"name":"matty","email":"mm@gmail.com","age":"29"}]

5voto

theseadroid Points 261

Utilisation lodash :

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

3voto

slobodan.blazeski Points 539

Je n'ai pas essayé le paquet csv https://npmjs.org/package/csv mais d'après la documentation, il semble que la mise en œuvre soit de qualité http://www.adaltas.com/projects/node-csv/

3voto

Xv. Points 879

J'ai commencé par node-csvtojson mais il apporte trop de dépendances pour ma liaison.

Sur la base de votre question et de la réponse de brnd J'ai utilisé node-csv y 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);
        });
     });

3voto

J'ai une solution très simple pour imprimer le json d'un csv sur la console en utilisant le module csvtojson.

// require csvtojson
var csv = require("csvtojson");

const csvFilePath='customer-data.csv' //file path of csv
csv()
.fromFile(csvFilePath)``
.then((jsonObj)=>{
    console.log(jsonObj);
})

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X