将 CSV 记录解析为 JavaScript 中 objects 的数组
Parse CSV records in to an array of objects in JavaScript
我是 JS 的新手,在 Regex 中没有太多 exp 来玩字符串操作。
这是我的 CSV 文件,其中包含表格形式的记录,第一行为 headers,从下一行开始,值将出现:
Name City Country
John Chennai IN
Ken Brisban AUS
Ben NY US
我需要像这样的 objects 数组中的输出:
[
{Name: 'John',City: "Chennai",Country:"IN"}
{Name: 'Ken',City: "Brisbane",Country:"AUS"}
{Name: 'Ben',City: "NY",Country:"US"}
]
我正在上传 CSV 文件,需要将这些记录保存到数据库中
下面是我上传 CSV 后将触发的代码块,我尝试使用以下内容解析 CSV 记录:
$scope.processFiles = function() {
//var input = document.getElementById("fileOutput");
var input = document.querySelector('input[type = "file"]')
var file = input.files[0];
var reader = new FileReader();
var output;
reader.onload = function (e) {
var csvToText = e.target.result;
output = csvToJSON(csvToText);
console.log(output);
};
reader.readAsText(file);
event.preventDefault();
}
function csvToJSON(csv) {
var lines = csv.split("\n");
var result = [];
var headers;
for (var i = 0; i < lines.length; i++) {
headers = lines[i].split("\n");
}
var cont = 0;
for (var i = 0; i < lines.length; i++) {
var obj = {};
var currentline = lines[i].split("\n");
for (var j = 0; j < headers.length; j++) {
obj[cont] = currentline[j];
}
cont++;
result.push(obj);
}
console.log(result);
//console.log(JSON.stringify(result));
//return result;
}
我得到的输出如下所示,即值显示在一行中并带有逗号分隔符,第四个数组元素不应显示。
0: {0: "Name,City,Country"}
1: {1: "John,Chennai,IN"}
2: {2: "Ken,Brisbane,AUS"}
3: {3: "Ben,NY,USA"}
4: {4: ""}
试试这个。
function csvToJSON(csv) {
//lop off any trailing or starting whitespace
csv = csv.trim();
//prep
let lines = csv.split('\n'),
headers,
output = [];
//iterate over lines...
lines.forEach((line, i) => {
//...break line into tab-separated parts
let parts = line.split(/\t+/);
//...if not the headers line, push to output. By this time
//we have the headers logged, so just match the value to
//header of the same index
if (i) {
let obj = {};
parts.forEach((part, i) => obj[headers[i]] = part);
output.push(obj);
//...else if headers line, log headers
} else
headers = parts;
})
//done
console.log(output);
return output;
}
CodePen。 (注意:在 CodePen 中,我正在从 HTML div
中读取 CSV,因此代码中存在细微差别。)
像这样的东西应该可以工作
function csvToJSON(csv) {
var lines = csv.split("\n");
var result = [];
var headers = lines[0].split(",");
lines.forEach( (line, index) => {
if (index === 0) continue // skip the first line (headers)
let data = {};
let cells = line.split(",") // separate by commas
cells.forEach( (cell, index) => {
let header = headers[index];
data[header] = cell;
}
result.push(data);
}
console.log(result);
//console.log(JSON.stringify(result));
return result;
}
我已将您的函数更正为 return 所需格式的输出:
function csvToJSON(csv) {
var lines = csv.split("\n");
var result = [];
var headers;
headers = lines[0].split(",");
for (var i = 1; i < lines.length; i++) {
var obj = {};
if(lines[i] == undefined || lines[i].trim() == "") {
continue;
}
var words = lines[i].split(",");
for(var j = 0; j < words.length; j++) {
obj[headers[j].trim()] = words[j];
}
result.push(obj);
}
console.log(result);
}
这很有效:
上传 > 转换 > 复制
https://csvjson.com/csv2json
我是 JS 的新手,在 Regex 中没有太多 exp 来玩字符串操作。
这是我的 CSV 文件,其中包含表格形式的记录,第一行为 headers,从下一行开始,值将出现:
Name City Country
John Chennai IN
Ken Brisban AUS
Ben NY US
我需要像这样的 objects 数组中的输出:
[
{Name: 'John',City: "Chennai",Country:"IN"}
{Name: 'Ken',City: "Brisbane",Country:"AUS"}
{Name: 'Ben',City: "NY",Country:"US"}
]
我正在上传 CSV 文件,需要将这些记录保存到数据库中 下面是我上传 CSV 后将触发的代码块,我尝试使用以下内容解析 CSV 记录:
$scope.processFiles = function() {
//var input = document.getElementById("fileOutput");
var input = document.querySelector('input[type = "file"]')
var file = input.files[0];
var reader = new FileReader();
var output;
reader.onload = function (e) {
var csvToText = e.target.result;
output = csvToJSON(csvToText);
console.log(output);
};
reader.readAsText(file);
event.preventDefault();
}
function csvToJSON(csv) {
var lines = csv.split("\n");
var result = [];
var headers;
for (var i = 0; i < lines.length; i++) {
headers = lines[i].split("\n");
}
var cont = 0;
for (var i = 0; i < lines.length; i++) {
var obj = {};
var currentline = lines[i].split("\n");
for (var j = 0; j < headers.length; j++) {
obj[cont] = currentline[j];
}
cont++;
result.push(obj);
}
console.log(result);
//console.log(JSON.stringify(result));
//return result;
}
我得到的输出如下所示,即值显示在一行中并带有逗号分隔符,第四个数组元素不应显示。
0: {0: "Name,City,Country"}
1: {1: "John,Chennai,IN"}
2: {2: "Ken,Brisbane,AUS"}
3: {3: "Ben,NY,USA"}
4: {4: ""}
试试这个。
function csvToJSON(csv) {
//lop off any trailing or starting whitespace
csv = csv.trim();
//prep
let lines = csv.split('\n'),
headers,
output = [];
//iterate over lines...
lines.forEach((line, i) => {
//...break line into tab-separated parts
let parts = line.split(/\t+/);
//...if not the headers line, push to output. By this time
//we have the headers logged, so just match the value to
//header of the same index
if (i) {
let obj = {};
parts.forEach((part, i) => obj[headers[i]] = part);
output.push(obj);
//...else if headers line, log headers
} else
headers = parts;
})
//done
console.log(output);
return output;
}
CodePen。 (注意:在 CodePen 中,我正在从 HTML div
中读取 CSV,因此代码中存在细微差别。)
像这样的东西应该可以工作
function csvToJSON(csv) {
var lines = csv.split("\n");
var result = [];
var headers = lines[0].split(",");
lines.forEach( (line, index) => {
if (index === 0) continue // skip the first line (headers)
let data = {};
let cells = line.split(",") // separate by commas
cells.forEach( (cell, index) => {
let header = headers[index];
data[header] = cell;
}
result.push(data);
}
console.log(result);
//console.log(JSON.stringify(result));
return result;
}
我已将您的函数更正为 return 所需格式的输出:
function csvToJSON(csv) {
var lines = csv.split("\n");
var result = [];
var headers;
headers = lines[0].split(",");
for (var i = 1; i < lines.length; i++) {
var obj = {};
if(lines[i] == undefined || lines[i].trim() == "") {
continue;
}
var words = lines[i].split(",");
for(var j = 0; j < words.length; j++) {
obj[headers[j].trim()] = words[j];
}
result.push(obj);
}
console.log(result);
}
这很有效: 上传 > 转换 > 复制 https://csvjson.com/csv2json