NodeJS - 将 CSV 转换为 JSON 对象数组
NodeJS - Convert CSV to JSON Object array
我正在尝试将以下 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 and this one with stream parser 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>');
您可以轻松组合String.prototype.split
with Array.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);
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);
如 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
});
您可以使用普通的 javascript,以及 split
和 map
函数
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>');
到目前为止的每个答案都没有反映您的数据存储在文件中。我认为这就是您要找的。您可以使用简单的 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
。
我正在尝试将以下 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 and this one with stream parser 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>');
您可以轻松组合String.prototype.split
with Array.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);
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);
如 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
});
您可以使用普通的 javascript,以及 split
和 map
函数
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>');
到目前为止的每个答案都没有反映您的数据存储在文件中。我认为这就是您要找的。您可以使用简单的 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
。