参考
PapaParse 5.x 的 API、配置选项、结果对象与常量速查。两个核心方法:
Papa.parse(input, config)与Papa.unparse(data, config)。
一、两个核心方法
| 方法 | 方向 | input / data | 返回 |
|---|---|---|---|
Papa.parse(input, config) | CSV → JS | 字符串 / File / URL(download) / Node 流 / NODE_STREAM_INPUT | 字符串非流式时同步返回 ParseResult;否则走回调 |
Papa.unparse(data, config) | JS → CSV | 数组的数组 / 对象数组 / { fields, data } | CSV 字符串(同步) |
二、parse 解析配置(config)
| 选项 | 默认 | 含义 |
|---|---|---|
delimiter | ""(自动探测) | 分隔符;可为字符串或函数;支持多字符 |
newline | ""(自动探测) | 换行序列:\r、\n 或 \r\n |
quoteChar | '"' | 字段引号字符 |
escapeChar | '"' | 引号内转义引号的字符(默认双写引号) |
header | false | 首行作字段名,每行变对象,字段名记入 meta.fields |
transformHeader | undefined | (header, index) => string 规范每个表头名(需 header:true) |
dynamicTyping | false | 数字/布尔转对应类型;可传对象/函数按列控制 |
preview | 0 | >0 时只解析前 N 行 |
encoding | "" | 本地文件编码(FileReader 支持的值) |
worker | false | 在 Web Worker 线程解析,避免阻塞 UI |
comments | false | 注释前缀字符串(如 "#"),匹配的整行跳过 |
step | undefined | (results, parser) => void 逐行流式回调 |
complete | undefined | (results, file?) => void 解析完成回调 |
error | undefined | (error, file?) => void 错误回调 |
download | false | 把首参当 URL 下载后解析 |
downloadRequestHeaders | undefined | 下载请求的自定义 HTTP 头 |
downloadRequestBody | undefined | 设了则改用 POST,作为请求体 |
withCredentials | undefined | XHR 的 withCredentials |
skipEmptyLines | false | 跳空行;'greedy' 连只含空白的行也跳 |
chunk | undefined | (results, parser) => void 逐块流式回调 |
chunkSize | undefined | 覆盖默认块大小 |
fastMode | undefined | 无引号数据走快路径(通常自动;含引号别强开) |
beforeFirstChunk | undefined | (chunk) => string? 在首块解析前修改原始文本 |
transform | undefined | (value, colIndexOrHeader) => any 逐值清洗/转换 |
delimitersToGuess | `[',', '\t', ' | ', ';', RECORD_SEP, UNIT_SEP]` |
skipFirstNLines | 0 | 跳过开头 N 行再解析 |
三、ParseResult 结果对象
ts
interface ParseResult<T> {
data: T[]; // 行数据:header:false 为数组的数组;header:true 为对象数组
errors: ParseError[]; // 错误数组(容错收集,不抛异常)
meta: ParseMeta; // 元信息
}data:header:false→string[][];header:true→ 对象数组。多出表头的字段进__parsed_extra。meta常见字段:delimiter、linebreak、aborted、truncated、cursor,以及header:true时的fields、renamedHeaders。
四、ParseError 错误对象
ts
interface ParseError {
type: "Quotes" | "Delimiter" | "FieldMismatch";
code: "MissingQuotes" | "UndetectableDelimiter" | "TooFewFields" | "TooManyFields" | ...;
message: string;
row?: number; // 出错行号
}PapaParse 容错:错误进
errors而非抛异常,data仍尽量返回。应主动检查result.errors.length。
五、parser 流式控制(step/chunk 回调第二参)
| 方法 | 作用 | Worker 下 |
|---|---|---|
parser.abort() | 立即停止解析(触发 complete,meta.aborted = true) | ✅ 可用 |
parser.pause() | 暂停解析(可恢复) | ❌ 不可用 |
parser.resume() | 恢复暂停的解析 | ❌ 不可用 |
六、unparse 反解析配置(config)
| 选项 | 默认 | 含义 |
|---|---|---|
quotes | false | 加引号策略:true 全加 / 布尔数组按列 / 函数按值;默认仅必要时加 |
quoteChar | '"' | 引号字符 |
escapeChar | '"' | 转义引号的字符 |
delimiter | "," | 分隔符(支持多字符) |
header | true | 是否输出表头行 |
newline | "\r\n" | 换行序列(默认 CRLF,符合 RFC 4180) |
skipEmptyLines | false | 跳空行;'greedy' 连只含空白的也跳 |
columns | null | 对象数组时显式指定输出哪些列及顺序(字符串数组) |
escapeFormulae | false | 给以 = + - @ 等开头的单元格加前缀,防 CSV 公式注入 |
七、Papa 常量
| 常量 | 值 | 用途 |
|---|---|---|
Papa.BAD_DELIMITERS | ["\r","\n",'"',""] | 禁止用作分隔符的字符 |
Papa.RECORD_SEP | ASCII 30 | 记录分隔符(不可见) |
Papa.UNIT_SEP | ASCII 31 | 单元分隔符(不可见) |
Papa.WORKERS_SUPPORTED | boolean | 当前环境是否支持 Web Worker |
Papa.LocalChunkSize | 约 10 MB | 本地 File 流式解析的默认块大小 |
Papa.RemoteChunkSize | 约 5 MB | 远程下载流式解析的默认块大小 |
Papa.DefaultDelimiter | "," | 自动探测失败时的回退分隔符 |
Papa.NODE_STREAM_INPUT | 哨兵值 | 作为 input 传入时,parse 返回 Node Duplex 流供 .pipe() |
八、同步 vs 异步速记
| 输入 / 模式 | 行为 |
|---|---|
| 字符串 + 非流式(无 step/worker) | 同步返回 ParseResult |
| File 对象 | 异步走 complete/step 回调 |
URL(download:true) | 异步走回调 |
worker:true | 异步走回调(不支持 pause/resume) |
Node 可读流 / NODE_STREAM_INPUT | 流式/异步 |