Mah*_*mar 175 javascript jquery
我的csv数据如下所示:
标题1,heading2,heading3,heading4,heading5,value1_1,value2_1,value3_1,value4_1,value5_1,value1_2,value2_2,value3_2,value4_2,value5_2 ....
你如何使用Javascript读取这些数据并转换为这样的数组?:
[heading1:value1_1,heading2:value2_1,heading3:value3_1,heading4:value4_1,heading5:value5_1],[heading1:value1_2,heading2:value2_2,heading3:value3_2,heading4:value4_2,heading5:value5_2] ....
我试过这段代码但没有运气!:
<script type="text/javascript">
var allText =[];
var allTextLines = [];
var Lines = [];
var txtFile = new XMLHttpRequest();
txtFile.open("GET", "file://d:/data.txt", true);
txtFile.onreadystatechange = function()
{
allText = txtFile.responseText;
allTextLines = allText.split(/\r\n|\n/);
};
document.write(allTextLines);<br>
document.write(allText);<br>
document.write(txtFile);<br>
</script>
Run Code Online (Sandbox Code Playgroud)
Eva*_*ice 194
不需要自己编写......
在jQuery的CSV库有一个调用的函数$.csv.toObjects(csv)是自动完成的映射.
注意:该库旨在处理符合RFC 4180的任何CSV数据,包括大多数"简单"解决方案忽略的所有令人讨厌的边缘情况.
就像@Blazemonger已经说过的那样,首先你需要添加换行符以使数据有效CSV.
使用以下数据集:
heading1,heading2,heading3,heading4,heading5
value1_1,value2_1,value3_1,value4_1,value5_1
value1_2,value2_2,value3_2,value4_2,value5_2
Run Code Online (Sandbox Code Playgroud)
使用代码:
var data = $.csv.toObjects(csv):
Run Code Online (Sandbox Code Playgroud)
保存在'data'中的输出将是:
[
{ heading1:"value1_1",heading2:"value2_1",heading3:"value3_1",heading4:"value4_1",heading5:"value5_1" }
{ heading1:"value1_2",heading2:"value2_2",heading3:"value3_2",heading4:"value4_2",heading5:"value5_2" }
]
Run Code Online (Sandbox Code Playgroud)
注意:从技术上讲,您编写键值映射的方式是无效的JavaScript.包含键值对的对象应该用括号括起来.
如果你想亲自尝试一下,我建议你看一下'toObjects()'选项卡下的Basic Usage Demonstration.
免责声明:我是jQuery-CSV的原作者.
更新:
编辑使用op提供的数据集,并包含一个指向演示的链接,可以测试数据的有效性.
UPDATE2:
由于关闭了Google Code.jquery-csv已移至GitHub
Bla*_*ger 109
注意:在我提醒有关CSV文件中可能出现的所有"特殊情况"(例如转义引号)之前,我编制了此解决方案.我想给那些想要快速和肮脏的东西的人留下我的答案,但我建议Evan回答准确性.
当您的data.txt文件是一长串逗号分隔的条目而没有换行符时,此代码将起作用:
data.txt中:
heading1,heading2,heading3,heading4,heading5,value1_1,...,value5_2
Run Code Online (Sandbox Code Playgroud)
JavaScript的:
$(document).ready(function() {
$.ajax({
type: "GET",
url: "data.txt",
dataType: "text",
success: function(data) {processData(data);}
});
});
function processData(allText) {
var record_num = 5; // or however many elements there are in each row
var allTextLines = allText.split(/\r\n|\n/);
var entries = allTextLines[0].split(',');
var lines = [];
var headings = entries.splice(0,record_num);
while (entries.length>0) {
var tarr = [];
for (var j=0; j<record_num; j++) {
tarr.push(headings[j]+":"+entries.shift());
}
lines.push(tarr);
}
// alert(lines);
}
Run Code Online (Sandbox Code Playgroud)
以下代码适用于"true"CSV文件,每个记录集之间都有换行符:
data.txt中:
heading1,heading2,heading3,heading4,heading5
value1_1,value2_1,value3_1,value4_1,value5_1
value1_2,value2_2,value3_2,value4_2,value5_2
Run Code Online (Sandbox Code Playgroud)
JavaScript的:
$(document).ready(function() {
$.ajax({
type: "GET",
url: "data.txt",
dataType: "text",
success: function(data) {processData(data);}
});
});
function processData(allText) {
var allTextLines = allText.split(/\r\n|\n/);
var headers = allTextLines[0].split(',');
var lines = [];
for (var i=1; i<allTextLines.length; i++) {
var data = allTextLines[i].split(',');
if (data.length == headers.length) {
var tarr = [];
for (var j=0; j<headers.length; j++) {
tarr.push(headers[j]+":"+data[j]);
}
lines.push(tarr);
}
}
// alert(lines);
}
Run Code Online (Sandbox Code Playgroud)
http://jsfiddle.net/mblase75/dcqxr/
Mat*_*att 62
不要在逗号上拆分 - 它对大多数CSV文件都不起作用,而且这个问题对于提问者的输入数据应用于每个人的看法太多了.解析CSV有点可怕,因为没有真正的官方标准,许多分隔的文本编写者不会考虑边缘情况.
这个问题很古老,但我相信现在Papa Parse已经有了更好的解决方案.这是我在贡献者的帮助下编写的一个库,用于解析CSV文本或文件.它是我所知道的唯一支持文件千兆字节大小的JS库.它还可以优雅地处理格式错误的输入.
1分钟内解析1 GB文件:

(更新:使用Papa Parse 4,同一个文件在Firefox中只用了大约30秒.Papa Parse 4现在是浏览器中最快的已知CSV解析器.)
解析文本非常简单:
var data = Papa.parse(csvString);
Run Code Online (Sandbox Code Playgroud)
解析文件也很简单:
Papa.parse(file, {
complete: function(results) {
console.log(results);
}
});
Run Code Online (Sandbox Code Playgroud)
流文件类似(这是流式传输远程文件的示例):
Papa.parse("http://example.com/bigfoo.csv", {
download: true,
step: function(row) {
console.log("Row:", row.data);
},
complete: function() {
console.log("All done!");
}
});
Run Code Online (Sandbox Code Playgroud)
如果您的网页在解析过程中锁定,Papa可以使用Web工作人员来保持您的网站被动.
如果存在标题行,Papa可以自动检测分隔符并将值与标题列匹配.它还可以将数值转换为实际数字类型.它适当地解析换行符和引号以及其他奇怪的情况,甚至可以尽可能稳健地处理格式错误的输入.我从现有的库中汲取灵感来制作Papa,这是其他JS实现的道具.
我正在使用d3.js来解析csv文件.非常好用.这是文档.
脚步:
使用Es6;
import { csv } from 'd3-request';
import url from 'path/to/data.csv';
csv(url, function(err, data) {
console.log(data);
})
Run Code Online (Sandbox Code Playgroud)
有关更多信息,请参阅文档.
更新 - 不推荐使用d3-request.你可以使用d3-fetch
您可以使用 PapaParse 来提供帮助。 https://www.papaparse.com/
这是一个 CodePen。 https://codepen.io/sandro-wiggers/pen/VxrxNJ
Papa.parse(e, {
header:true,
before: function(file, inputElem){ console.log('Attempting to Parse...')},
error: function(err, file, inputElem, reason){ console.log(err); },
complete: function(results, file){ $.PAYLOAD = results; }
});
Run Code Online (Sandbox Code Playgroud)
这是一个解析 CSV 数据的 JavaScript 函数,考虑引号内的逗号。
// Parse a CSV row, accounting for commas inside quotes
function parse(row){
var insideQuote = false,
entries = [],
entry = [];
row.split('').forEach(function (character) {
if(character === '"') {
insideQuote = !insideQuote;
} else {
if(character == "," && !insideQuote) {
entries.push(entry.join(''));
entry = [];
} else {
entry.push(character);
}
}
});
entries.push(entry.join(''));
return entries;
}
Run Code Online (Sandbox Code Playgroud)
使用该函数解析 CSV 文件的示例,如下所示:
"foo, the column",bar
2,3
"4, the value",5
Run Code Online (Sandbox Code Playgroud)
成数组:
// csv could contain the content read from a csv file
var csv = '"foo, the column",bar\n2,3\n"4, the value",5',
// Split the input into lines
lines = csv.split('\n'),
// Extract column names from the first line
columnNamesLine = lines[0],
columnNames = parse(columnNamesLine),
// Extract data from subsequent lines
dataLines = lines.slice(1),
data = dataLines.map(parse);
// Prints ["foo, the column","bar"]
console.log(JSON.stringify(columnNames));
// Prints [["2","3"],["4, the value","5"]]
console.log(JSON.stringify(data));
Run Code Online (Sandbox Code Playgroud)
以下是将数据转换为对象的方法,例如D3 的 csv 解析器(这是一个可靠的第三方解决方案):
var dataObjects = data.map(function (arr) {
var dataObject = {};
columnNames.forEach(function(columnName, i){
dataObject[columnName] = arr[i];
});
return dataObject;
});
// Prints [{"foo":"2","bar":"3"},{"foo":"4","bar":"5"}]
console.log(JSON.stringify(dataObjects));
Run Code Online (Sandbox Code Playgroud)
享受!--柯兰
小智 5
如果您想在不使用Ajax 的情况下解决此问题,请使用FileReader()Web API。
实施示例:
.csv文件function readSingleFile(e) {
var file = e.target.files[0];
if (!file) {
return;
}
var reader = new FileReader();
reader.onload = function(e) {
var contents = e.target.result;
displayContents(contents);
displayParsed(contents);
};
reader.readAsText(file);
}
function displayContents(contents) {
var element = document.getElementById('file-content');
element.textContent = contents;
}
function displayParsed(contents) {
const element = document.getElementById('file-parsed');
const json = contents.split(',');
element.textContent = JSON.stringify(json);
}
document.getElementById('file-input').addEventListener('change', readSingleFile, false);Run Code Online (Sandbox Code Playgroud)
<input type="file" id="file-input" />
<h3>Raw contents of the file:</h3>
<pre id="file-content">No data yet.</pre>
<h3>Parsed file contents:</h3>
<pre id="file-parsed">No data yet.</pre>Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
555437 次 |
| 最近记录: |