gpt4 book ai didi

javascript - 在JavaScript中,将csv转换为json时如何忽略空行

转载 作者:行者123 更新时间:2023-11-28 15:08:20 29 4
gpt4 key购买 nike

我正在开发一个项目,需要将 csv 转换为 json。我发现了一把 fiddle here 。唯一的问题是,如果你在末尾添加空行并转换为 json,它会将空行作为对象返回。

例如,

"Id","UserName"
"1","Sam Smith"
"2","Fred Frankly"
"1","Zachary Zupers"



...

将返回

[{"Id":"1","UserName":"Sam Smith"},
{"Id":"2","UserName":"Fred Frankly"},
{"Id":"1","UserName":"Zachary Zupers"},
{"Id":""},
{"Id":""}]

关于堆栈溢出的其他答案似乎与其他编程语言相关,尽管它们似乎回答了提问者的问题,但它们解决了问题而没有解释。如果你能解释你的答案是如何运作的,那就奖励温暖的模糊。

最佳答案

添加 .trim() 以删除 strData 周围的空白

strData = strData.trim();

http://jsfiddle.net/AZFvQ/909/

// Source: http://www.bennadel.com/blog/1504-Ask-Ben-Parsing-CSV-Strings-With-Javascript-Exec-Regular-Expression-Command.htm
// This will parse a delimited string into an array of
// arrays. The default delimiter is the comma, but this
// can be overriden in the second argument.

function CSVToArray(strData, strDelimiter) {
strData = strData.trim();
// Check to see if the delimiter is defined. If not,
// then default to comma.
strDelimiter = (strDelimiter || ",");
// Create a regular expression to parse the CSV values.
var objPattern = new RegExp((
// Delimiters.
"(\\" + strDelimiter + "|\\r?\\n|\\r|^)" +
// Quoted fields.
"(?:\"([^\"]*(?:\"\"[^\"]*)*)\"|" +
// Standard fields.
"([^\"\\" + strDelimiter + "\\r\\n]*))"), "gi");
// Create an array to hold our data. Give the array
// a default empty first row.
var arrData = [[]];
// Create an array to hold our individual pattern
// matching groups.
var arrMatches = null;
// Keep looping over the regular expression matches
// until we can no longer find a match.
while (arrMatches = objPattern.exec(strData)) {
// Get the delimiter that was found.
var strMatchedDelimiter = arrMatches[1];
// Check to see if the given delimiter has a length
// (is not the start of string) and if it matches
// field delimiter. If id does not, then we know
// that this delimiter is a row delimiter.
if (strMatchedDelimiter.length && (strMatchedDelimiter != strDelimiter)) {
// Since we have reached a new row of data,
// add an empty row to our data array.
arrData.push([]);
}
// Now that we have our delimiter out of the way,
// let's check to see which kind of value we
// captured (quoted or unquoted).
if (arrMatches[2]) {
// We found a quoted value. When we capture
// this value, unescape any double quotes.
var strMatchedValue = arrMatches[2].replace(
new RegExp("\"\"", "g"), "\"");
} else {
// We found a non-quoted value.
var strMatchedValue = arrMatches[3];
}
// Now that we have our value string, let's add
// it to the data array.
arrData[arrData.length - 1].push(strMatchedValue);
}
// Return the parsed data.
return (arrData);
}

function CSV2JSON(csv) {
var array = CSVToArray(csv);
var objArray = [];
for (var i = 1; i < array.length; i++) {
objArray[i - 1] = {};
for (var k = 0; k < array[0].length && k < array[i].length; k++) {
var key = array[0][k];
objArray[i - 1][key] = array[i][k]
}
}

var json = JSON.stringify(objArray);
var str = json.replace(/},/g, "},\r\n");

return str;
}

$("#convert").click(function() {
var csv = $("#csv").val();
var json = CSV2JSON(csv);
$("#json").val(json);
});

$("#download").click(function() {
var csv = $("#csv").val();
var json = CSV2JSON(csv);
window.open("data:text/json;charset=utf-8," + escape(json))
});
#heading { font-size: x-large; font-weight: bold; }
.text { width: 99%; height: 200px; }
.small { font-size: small; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>CSV to JSON</title>
</head>
<body>
<p id="heading">CSV to JSON Converter</p>
<p class="small"><a href="http://jsfiddle.net/sturtevant/vUnF9/" target="_blank">JSON to CSV Converter</a>
<hr />
<p>Paste Your CSV Here:</p>
<textarea id="csv" class="text">"Id","UserName"
"1","Sam Smith"
"2","Fred Frankly"
"1","Zachary Zupers"</textarea>
<br />
<button id="convert">Convert to JSON</button>
&nbsp;&nbsp;
<button id="download">Download JSON</button>
<textarea id="json" class="text"></textarea>
<p>Based on code posted <a href="http://www.bennadel.com/blog/1504-Ask-Ben-Parsing-CSV-Strings-With-Javascript-Exec-Regular-Expression-Command.htm" target="_blank">here on Ben Nadel's blog</a></p>
</body>
</html>

新输出

[{"Id":"1","UserName":"Sam Smith"},
{"Id":"2","UserName":"Fred Frankly"},
{"Id":"1","UserName":"Zachary Zupers"}]

关于javascript - 在JavaScript中,将csv转换为json时如何忽略空行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37901307/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com