选项卡 - 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'
我想知道是否有办法将 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'