2016-04-08 125 views
0

有人可以请教如何将数组和字典的CSV文件转换为JSON。 我已经看了一些类似的问题没有太大的成功,因为他们没有解决数组和字典的转换问题。如何将CSV(包含数组和字典)值转换为JSON

这里是一个示例CSV文本,其中包含数组和字典,还可以查找创建此CSV文本的excel文件(显示为图像)。

出于解释的目的,我有限的领域和复杂性。我想知道是否有一段代码或工具转换器可以完成转换工作。

仅供参考:我正在收集excel文件中的信息,转换成CSV文件以将其加载到数据库中。

firstName,lastName,address 
John,Baker,Newyork 
Paul,Fisher,Paris 
Gabriel,Solksi,[location:London, postcode:EC17DC] 
Laurene,smith,{location:Beijing, pincode:512389, alternateNames:[risingCity, futureCity]} 

excel file that used to convert to CSV

回答

1

这里http://jsfiddle.net/sturtevant/AZFvQ/看看。此链接有您需要的代码将CSV文本转换为JSON

您也可以参考市场上可买到的产品,如PapaParse

function CSVToArray(strData, strDelimiter) { 
    // 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; 
}