catspeake
2019-06-05 16:16:21
解析CSV數(shù)據(jù)的JavaScript代碼有人知道我在哪里可以找到一些javascript代碼來解析CSV數(shù)據(jù)嗎?
3 回答

qq_花開花謝_0
TA貢獻1835條經(jīng)驗 獲得超7個贊
它是一個jQuery插件,用于將CSV解析為Javascript數(shù)據(jù)的端到端解決方案。它處理在RFC 4180,還有一些彈出的Excel/GoogleSpreadsheed導(dǎo)出(即主要涉及空值),而規(guī)范缺少這些導(dǎo)出。
例子:
曲目,藝術(shù)家,專輯,年份
“危險”,“Busta節(jié)奏”,“災(zāi)難降臨時”,1997年
//?calling?thismusic?=?$.csv.toArrays(csv)//?outputs...[ ??["track","artist","album","year"], ??["Dangerous","Busta?Rhymes","When?Disaster?Strikes","1997"]]console.log(music[1][2])?//?outputs:?'When?Disaster?Strikes'
最新情況:
哦,是的,我也應(yīng)該提到它是完全可配置的。
music?=?$.csv.toArrays(csv,?{ ??delimiter:"'",?//?sets?a?custom?value?delimiter?character ??separator:';',?//?sets?a?custom?field?separator?character});
更新2:
它現(xiàn)在也適用于Node.js上的jQuery。因此,您可以選擇使用相同的lib進行客戶端或服務(wù)器端解析。

慕運維8079593
TA貢獻1876條經(jīng)驗 獲得超5個贊
我有一個實施作為電子表格項目的一部分。
這段代碼還沒有經(jīng)過徹底的測試,但是歡迎任何人使用它。
但是,正如一些答案所指出的那樣,如果您實際擁有的話,您的實現(xiàn)可能要簡單得多。DSV或TSV文件,因為它們不允許在值中使用記錄和字段分隔符。另一方面,csv實際上可以在字段中有逗號和換行符,這破壞了大多數(shù)正則表達式和基于拆分的方法。
var?CSV?=?{parse:?function(csv,?reviver)?{ ????reviver?=?reviver?||?function(r,?c,?v)?{?return?v;?}; ????var?chars?=?csv.split(''),?c?=?0,?cc?=?chars.length,?start,?end,?table?=?[],?row; ????while?(c?<?cc)?{ ????????table.push(row?=?[]); ????????while?(c?<?cc?&&?'\r'?!==?chars[c]?&&?'\n'?!==?chars[c])?{ ????????????start?=?end?=?c; ????????????if?('"'?===?chars[c]){ ????????????????start?=?end?=?++c; ????????????????while?(c?<?cc)?{ ????????????????????if?('"'?===?chars[c])?{ ????????????????????????if?('"'?!==?chars[c+1])?{?break;?} ????????????????????????else?{?chars[++c]?=?'';?}?//?unescape?"" ????????????????????} ????????????????????end?=?++c; ????????????????} ????????????????if?('"'?===?chars[c])?{?++c;?} ????????????????while?(c?<?cc?&&?'\r'?!==?chars[c]?&&?'\n'?!==?chars[c]?&&?','?!==?chars[c])?{?++c;?} ????????????}?else?{ ????????????????while?(c?<?cc?&&?'\r'?!==?chars[c]?&&?'\n'?!==?chars[c]?&&?','?!==?chars[c])?{?end?=?++c;?} ????????????} ????????????row.push(reviver(table.length-1,?row.length,?chars.slice(start,?end).join(''))); ????????????if?(','?===?chars[c])?{?++c;?} ????????} ????????if?('\r'?===?chars[c])?{?++c;?} ????????if?('\n'?===?chars[c])?{?++c;?} ????} ????return?table;},stringify:?function(table,?replacer)?{ ????replacer?=?replacer?||?function(r,?c,?v)?{?return?v;?}; ????var?csv?=?'',?c,?cc,?r,?rr?=?table.length,?cell; ????for?(r?=?0;?r?<?rr;?++r)?{ ????????if?(r)?{?csv?+=?'\r\n';?} ????????for?(c?=?0,?cc?=?table[r].length;?c?<?cc;?++c)?{ ????????????if?(c)?{?csv?+=?',';?} ????????????cell?=?replacer(r,?c,?table[r][c]); ????????????if?(/[,\r\n"]/.test(cell))?{?cell?=?'"'?+?cell.replace(/"/g,?'""')?+?'"';?} ????????????csv?+=?(cell?||?0?===?cell)???cell?:?''; ????????} ????} ????return?csv;}};
添加回答
舉報
0/150
提交
取消