Estoy tratando de convertir el archivo csv a json. Estoy usando .

Ejemplo CSV:

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

Deseado JSON:

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

Traté de nodo-csv analizador de la biblioteca.Pero la salida es igual que la serie no como yo esperaba.

Estoy usando el Nodo de 0.8 y express.js y quisiera una recomendación sobre cómo lograr esto fácilmente.

InformationsquelleAutor Jetson John | 2013-05-30

14 Comentarios

  1. 71

    Node.js csvtojson módulo es una completa nodejs csv analizador. Puede ser utilizado como node.js aplicación de la biblioteca /una herramienta de línea de comandos /o el navegador con la ayuda de browserify o webpack.

    el código fuente se puede encontrar en: https://github.com/Keyang/node-csvtojson

    Es rápido con bajo consumo de memoria, pero potente, para apoyar cualquiera de análisis de necesidades con abundante API y fáciles de leer la documentación.

    La documentación detallada se puede encontrar aquí

    Aquí están algunos ejemplos de código:

    Utilizar como una biblioteca en su Node.js aplicación ([email protected] +):

    1. Instalarlo a través de npm

    npm install --save [email protected]

    1. Utilizar en su node.js aplicación:
    //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);

    Utilizarlo como una herramienta de línea de comandos:

    sh# npm install csvtojson
    sh# ./node_modules/csvtojson/bin/csvtojson ./youCsvFile.csv

    -o-

    sh# npm install -g csvtojson
    sh# csvtojson ./yourCsvFile.csv

    Para uso avanzado:

    sh# csvtojson --help

    Usted puede encontrar más detalles en la página de github arriba.

    • Por favor, añadir un poco de código en aquí
    • El código ha sido añadido. Consulte la documentación más detallada aquí github.com/Keyang/node-csvtojson
    • +1 para el detalle de la respuesta
    • Desde la versión 0.3.0, csvtojson no depende de ningún otro lib. Se comportará como un auténtico objeto de Flujo.
    • El enlace para el blog está muerto.
    • Actualizado. Gracias por dejarme saber.
    • No sé si esto está sucediendo sólo para mí, sino para un gran archivo CSV esto es lento. Como 10 segundos más lento que el d3
    • ¿Has probado multi-hilo característica de la versión 0.4.0?

  2. 18

    Puedes probar a utilizar underscore.js

    Primer lugar, convertir las líneas en las matrices mediante la toArray función :

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

    A continuación, objeto de las matrices, junto con el objeto función :

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

    Por entonces, el json var debe contener algo como :

    {"a": 1,"b": 2,"c": 3,"d": 4}
  3. 11

    Aquí es una solución que no requiere de un módulo independiente. Sin embargo, es muy crudo, y no implementa el manejo de errores. También podría utilizar más pruebas, pero se te va. Si eres de análisis de archivos muy grandes, puede que desee buscar una alternativa. También, vea este solución de Ben Nadel.

    Nodo del Módulo de Código, 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);
    };

    Jazmín de la Prueba, 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);
        });
    });
    • este no funciona tan bien como csvtojson. Cuando yo tenía «23 de Agosto de 2016» se dividió aug23 y 2016 en diferentes campos
    • Bummer. Usted podría ajustar la fecha entre comillas para solucionarlo?
  4. 9

    Tenía que hacer algo similar, espero que esto ayude.

    //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);});
    • O incluso var json = f.map(function(d, i){ ... return tmp; }
  5. 3

    Empecé con nodo-csvtojson, pero trajo demasiadas dependencias para mi vinculación.

    Edificio en su pregunta y la respuesta por brnd, he utilizado nodo-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);
            });
         });
    • async y subrayado fue demasiado para usted?
    • en el momento en el que he publicado, las dependencias eran diferentes: github.com/Keyang/node-csvtojson/blob/… Tirando en express para un csv de conversión sentido antinatural
    • Oh, sí que es un loco de la dependencia. Mi mal.
  6. 2

    Utilizando lodash:

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

    Tengo una solución muy simple para solo imprimir json desde csv en la consola usando csvtojson módulo.

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

    Nodo-ETL paquete es suficiente para todos los BI de procesamiento.

    npm install node-etl; 

    A continuación :

    var ETL=require('node-etl');
    var output=ETL.extract('./data.csv',{
                  headers:["a","b","c","d"],
                  ignore:(line,index)=>index!==0, //ignore first line
     });
    • El enlace a esta biblioteca está muerto, tal vez fue movido a otro lugar en Github (o bifurcadas?). Por favor actualizar el link.
    • npmjs.com/package/node-etl Biblioteca funciona bien!
    • Gracias @RohitParte . Este es uno de mis primeros módulos en NodeJs. Mientras que algunas de las características funcionan bien, lo que falta es un montón de características. Me he vuelto muy ocupado con otras cosas (Ingeniería de Confiabilidad, DevOps, .. etc).
  9. 1

    He utilizado csvtojson biblioteca para la conversión de csv cadena json array.
    Cuenta con variedad de función que puede ayudarle a convertir a JSON.

    También soporta la lectura de archivo y transmisión de archivos.

    Ser cuidadoso al analizar el csv que puede contener la coma(,) o cualquier otro delimitador .
    Para quitar el delimitador por favor vea mi respuesta aquí.

  10. 1

    Si quieres que solo una línea de comandos del convertidor, el más rápido y más limpio solución para mí, es el uso de csvtojson a través de npx (incluidos por defecto en node.js)

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

  11. 0

    A mí y a mi compañero creado un servicio web para manejar este tipo de cosas.

    Retirar Modifly.co para obtener instrucciones sobre cómo convertir CSV a JSON con un único Descanso de la llamada.

  12. 0

    Paso 1:

    Nodo instalar el módulo:
    npm install csvtojson –guardar

    Paso 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);
    });

Dejar respuesta

Please enter your comment!
Please enter your name here