选项卡 - CSV 到 JSON

Tabulator - CSV to JSON

我想知道是否有办法将 csv 转换为适合 Tabulator 库的 JSON 格式?

我们的想法是采用 excel 中所见的格式: - 左上角的第一个单元格,空的 - 列 A、B、C...AA、AB...根据最长行上的单元格数 - 行号自动在每行的第一个单元格上)

我有直接用循环来做的想法,但我发现这需要很多时间。我看不出任何其他方式。

感谢您的帮助。

检查以下功能,希望这就是您要找的...

let csvfile = 'title1,title2,title3,title4\n1,2,3,4\n11,22,33,44' //YOUR CSV FILE
let capLetters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' // ALPHABET SET
let finalJson = [];
let headers;
let line =[];

convertCSV2JSON(csvfile)

function convertCSV2JSON(csv) {
    line = csv.split("\n"); //PARSE ALL AVAILABLE LINES INTO ARRAY
    result = [];
    
    headers = line[0].split(","); //PARSE ALL AVAILABLE STRING NAMES INTO ARRAY AND KEEP ONLY THE FIRST ONE (HEADER)

  
    line.slice(1).forEach(function(item,i){ //RUN EACH ITEM EXCLUDING COLUMN NAMES
        var obj = {};

        if(line[i] === null || line[i] === undefined) {
        }else{

                var entries = line[i+1].split(","); // SEPARATE FOUND ENTRIES EXCLUDING COLUMN NAMES (i+1)

                for(var j = 0; j < entries.length; j++) { // PARSE ENTRIES 
                        obj[convert2Letters(j)] = entries[j]; // ASSIGN A LETTER AS COLUMN NAME
                }
        }
        finalJson.push(obj);
    })
    console.log(finalJson);
}

function convert2Letters(iteration) {
    let readyLetter = ''
    while (iteration >= 0) {
    
        readyLetter += capLetters[iteration % 26]
        iteration = Math.floor(iteration / 26) - 1
    }
    return readyLetter
}

模糊部分在 foreach() 函数中,因为您不能根据自己的喜好启动索引... slice() 成功了!

此外,convert2Letters() 函数接受一个字母数组,并在每次迭代中找到 26 个字母的模数,删除一个字母会显示下一个组合...

示例:

  • 如果你有 30 列,它将给出 30 % 26 = 4
  • 4 对应于 capLetters[4] 即 'E'
  • 接下来计算:iteration = Math.floor(iteration / 26) - 1 这意味着每 26 个增量 (0,26,52,78...) 它将给出 (-1,0,1 ,2...) 对应。因此,30 列迭代的结果为 0,对应于 capLetters[0] = 'A'
  • 结果:30 列将给出字母 'EA'