Jquery 如何解析双引号CSV值并分配给JSON对象?

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

您好,我的CSV字符串如下所示,但当我使用
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;
};