NodeJS - 将CSV转换为JSON对象数组

时间:2016-04-12 20:15:31

标签: javascript arrays node.js jsonobject

我正在尝试将以下CSV格式的数据转换为JSON对象数组

CSV formatted data: apples,oranges,grapes,peach,pineapple

JSON Object Array: {
                     fruits: [
                       {
                          "name": "apples"
                       },
                       {
                          "name": "oranges"
                       },
                       {
                          "name": "grapes"
                       },
                       {
                          "name": "peach"
                       },
                       {
                          "name": "pineapple"
                       }
                     ]
                   }

我引用了这个npm包https://www.npmjs.com/package/csvtojson,这个包含了流解析器https://github.com/nicolashery/example-stream-parser,但不确定这可能符合我的需要。

任何人都可以建议一种方法将此CSV数据转换为已发布格式的JSON对象数组。

上述查询的解决方案(请参阅以下评论部分了解更多详情),

var res = {};

res.fruits = 'apples|1,oranges|2,grapes|3,peach|4,pineapple|5'
.split(',').map(function (fruit) { //as did by @Dmitriy Simushev in the below reply
    return {
      "name": fruit.split('|')[0],
      "value": fruit.split('|')[1]
    }
});

document.write('<pre>' + JSON.stringify(res, 0, 2) + '</pre>');

5 个答案:

答案 0 :(得分:1)

您可以轻松地将String.prototype.splitArray.prototype.map结合使用,以达到目标。

以下是如何完成的示例:

var data = "apples,oranges,grapes,peach,pineapple";

// Wrap fruits names with object,
var fruits = data.split(',').map(function(fruit) {
    return {name: fruit}
});

// Wrap fruits set with outer object.
var json = {fruits: fruits};

// Show the result.
console.dir(json);

答案 1 :(得分:1)

var csv_data = 'apples,oranges,grapes,peach,pineapple';
var csv_array = csv_data.split(',');
var object = {};
var arr = [];
for(var i=0; i<csv_array.length; i++){
    arr.push({name:csv_array[i]});
}
object['fruits'] = arr;
console.log(object);

答案 2 :(得分:1)

您可以使用普通的javascript,splitmap函数

&#13;
&#13;
var res = {};

res.fruits = 'apples|1,oranges|2,grapes|3,peach|4,pineapple|5'
    .split(',').map(e => ({
        "name": e.split('|')[0],
        "value": e.split('|')[1]
    }));

document.write('<pre>' + JSON.stringify(res, 0, 2) + '</pre>');
&#13;
&#13;
&#13;

答案 3 :(得分:0)

docs所示,您可以像这样转换您的csv文件

var Converter = require("csvtojson").Converter;
var converter = new Converter({});
converter.fromFile("./yourCSVfile.csv", function(err, result){
   // do something with "result", it's json
});

答案 4 :(得分:0)

到目前为止,每个答案都没有反映出您的数据存储在文件中。我认为这正是你要找的。您可以使用简单的Node.js流来实现此目的:

var fs = require('fs');
var es = require('event-stream');

fs.createReadStream('data.csv')
.pipe(es.split())
.on('data', (row) => {
  console.log({
    fruits: row.toString().split(',').map((fruit) => {
      return {
        name: fruit.trim()
      }
    })
  });
});

您需要安装事件流npm install event-stream