Jquery 如何解析双引号CSV值并分配给JSON对象?
您好,我的CSV字符串如下所示,但当我使用Jquery 如何解析双引号CSV值并分配给JSON对象?,jquery,json,Jquery,Json,您好,我的CSV字符串如下所示,但当我使用spilt(',')时会产生问题,因为我的CSV值如下所示: FirstName,LastName,Company,Website,Designation,Linkedin,Email,Phone,City,State,Country,TechArea,FirmType,FirmSize,LastContactDate,NextContactDate,LeadDescription,OwnerNotes,ReminderDate,AdminNotes,L
spilt(',')
时会产生问题,因为我的CSV值如下所示:
FirstName,LastName,Company,Website,Designation,Linkedin,Email,Phone,City,State,Country,TechArea,FirmType,FirmSize,LastContactDate,NextContactDate,LeadDescription,OwnerNotes,ReminderDate,AdminNotes,LeadStatus
Andrew,O'Connor,Goulston & Storrs PC,https://www.goulstonstorrs.com,Associate,,aoconnor@goulstonstorrs.com,(617) 574-4153,Boston,,USA,,,,,,,,,,
Lawrence,Cogswell,"Hamilton, Brook, Smith & Reynolds, P.C",https://www.hbsr.com,Principal,,Lawrence.Cogswell@hbsr.com,(617) 607-5907,"Boston, MA",,,,,,,,,,,,
在记事本++中,此双引号出现,而在Excel中,它在单个单元格中生成全部
此处“Hamilton,Brook,Smith&Reynolds,p.C”
这是JSON密钥对的单个值,但我的解析函数使用拆分(',')将其处理为单独的值
。请帮帮我
下面是我的CSV解析和该函数的JSON
function convertToJson(inputCsv){
//var csv is the CSV file with headers
var userid = $('#upload-lead-button').val();
console.log(userid);
var lines=inputCsv.split("\r\n").slice(0, -1);
var result = [];
var headers=lines[0].split(",");
for(var i=1;i<lines.length;i++){
var obj = {};
// Check if the line has inverted double quotes start and end
// Example
// Lawrence,Cogswell,"Hamilton, Brook, Smith & Reynolds,P.C",https://www.hbsr.com,Principal,,Lawrence.Cogswell@hbsr.com,(617) 607-5907,"Boston, MA",,,,,,,,,,,,
var currentline=lines[i].split(",");
for(var j=0;j<headers.length;j++){
var str = currentline[j]
// var str1 = ''
// str = str.trim()
// if( str.startsWith('"') ){
// // str = str.replace(/^\"/, '');
// // str = str.replace(/\"$/, '');
// str1 = + str
// continue
// }
obj[headers[j]] = str;
}
obj["userid"] = userid;
result.push(obj);
}
console.log(result);
//return result; //JavaScript object
return JSON.stringify(result); //JSON
}
函数convertToJson(inputCsv){
//var csv是带有标题的csv文件
var userid=$(“#上传线索按钮”).val();
console.log(userid);
变量行=inputCsv.split(“\r\n”).slice(0,-1);
var结果=[];
var headers=行[0]。拆分(“”,“”);
对于(var i=1;ii),我解决了上述问题
在本例中,我尝试跳过CSV行的溢出,该行具有“
函数convertToJson(inputCsv){
//var csv是带有标题的csv文件
var userid=$(“#上传线索按钮”).val();
console.log(userid);
变量行=inputCsv.split(“\r\n”).slice(0,-1);
var结果=[];
var headers=行[0]。拆分(“”,“”);
对于(var i=1;我强烈建议您为此使用CSV解析库,例如我认为正则表达式或在var currentline=lines[i].split(“,”)之前执行某些操作)
可以做到这一点问题是,前面我在考虑特殊字符,我使用记事本++发现我不能在共享主机中使用npm。如果不使用npm,只需从GIT下载文件并引用它即可
function convertToJson(inputCsv){
//var csv is the CSV file with headers
var userid = $('#upload-lead-button').val();
console.log(userid);
var lines=inputCsv.split("\r\n").slice(0, -1);
var result = [];
var headers=lines[0].split(",");
for(var i=1;i<lines.length;i++){
var obj = {};
// Check if the line has inverted double quotes start and end
// Example
// Lawrence,Cogswell,"Hamilton, Brook, Smith & Reynolds,P.C",https://www.hbsr.com,Principal,,Lawrence.Cogswell@hbsr.com,(617) 607-5907,"Boston, MA",,,,,,,,,,,,
// IF DOUBLE QUOTES ARE NOT THERE THEN IN CURRENT LINE THEN SKIP
if(lines[i].includes('"')){
var str1 = lines[i]
var arr = CSVtoArray(str1)
for(var j=0;j<headers.length;j++){
var str = arr[j]
obj[headers[j]] = str;
}
}else{
var currentline=lines[i].split(",");
for(var j=0;j<headers.length;j++){
var str = currentline[j]
obj[headers[j]] = str;
}
}
obj["userid"] = userid;
result.push(obj);
}
console.log(result);
//return result; //JavaScript object
return JSON.stringify(result); //JSON
}
// Return array of string values, or NULL if CSV string not well formed.
function CSVtoArray(text) {
var re_valid = /^\s*(?:'[^'\\]*(?:\\[\S\s][^'\\]*)*'|"[^"\\]*(?:\\[\S\s][^"\\]*)*"|[^,'"\s\\]*(?:\s+[^,'"\s\\]+)*)\s*(?:,\s*(?:'[^'\\]*(?:\\[\S\s][^'\\]*)*'|"[^"\\]*(?:\\[\S\s][^"\\]*)*"|[^,'"\s\\]*(?:\s+[^,'"\s\\]+)*)\s*)*$/;
var re_value = /(?!\s*$)\s*(?:'([^'\\]*(?:\\[\S\s][^'\\]*)*)'|"([^"\\]*(?:\\[\S\s][^"\\]*)*)"|([^,'"\s\\]*(?:\s+[^,'"\s\\]+)*))\s*(?:,|$)/g;
// Return NULL if input string is not well formed CSV string.
if (!re_valid.test(text)) return null;
var a = []; // Initialize array to receive values.
text.replace(re_value, // "Walk" the string using replace with callback.
function(m0, m1, m2, m3) {
// Remove backslash from \' in single quoted values.
if (m1 !== undefined) a.push(m1.replace(/\\'/g, "'"));
// Remove backslash from \" in double quoted values.
else if (m2 !== undefined) a.push(m2.replace(/\\"/g, '"'));
else if (m3 !== undefined) a.push(m3);
return ''; // Return empty string.
});
// Handle special case of empty last value.
if (/,\s*$/.test(text)) a.push('');
return a;
};