docs/index.html
Version
5.0
Now the fastest JavaScript CSV parser for the browser
The world's first multi-threaded CSV parser for the browser
Papa can handle files gigabytes in size without crashing
Use Papa when performance, privacy, and correctness matter to you
Papa alleviates privacy concerns related to uploading files
Malformed CSV is handled gracefully with a detailed error report
CSV→JSON and JSON→CSV
Auto-detect delimiter
Stream local and remote files
Header row support
Skip commented lines
Fast mode
Graceful error handling
Optional sprinkle of jQuery
SmartyStreets verifies addresses, many of which are in CSV files. Papa Parse can process huge files in the browser. "We rapidly built an awesome client-side file processor with Papa Parse."
MetaReader helps you see your data from a meta level before you start detailed analysis. "Papa Parse made it very easy to load and ready user CSV files in the browser on the client side."
EpiML is an agent-based mathematical model for the web, still in its early stages of development. "Papa makes it so easy to use CSV, which is good for scientists."
String.split(',')?"Heavens, no. Papa does it right. Just pass in the CSV string with an optional configuration.
var results = Papa.parse(csvString, config);
/*
results = {
data: [...], // parsed data
errors: [...], // errors encountered
meta: { ... } // extra parse info
}
*/
That's okay. Papa will scan the first few rows to find the right delimiter.
var results = Papa.parse(csvString);
console.log(results.meta.delimiter);
// "\t"
Then give Papa a File instead of a string. Since file parsing is asynchronous, don't forget a callback.
Papa.parse(fileInput.files[0], {
complete: function(results) {
console.log(results);
}
});
Oh, well then just pass in the URL and—of course—a callback.
Papa.parse("http://example.com/file.csv", {
download: true,
complete: function(results) {
console.log(results);
}
});
That's what streaming is for. Specify a step callback to receive the results row-by-row. This way, you won't load the whole file into memory and crash the browser.
Papa.parse("http://example.com/big.csv", {
download: true,
step: function(row) {
console.log("Row:", row.data);
},
complete: function() {
console.log("All done!");
}
});
That happens when a long-running script is executing in the same thread as the page. Use a Worker thread by specifying worker: true. It may take slightly longer, but your page will stay reactive.
Papa.parse(bigFile, {
worker: true,
step: function(row) {
console.log("Row:", row.data);
},
complete: function() {
console.log("All done!");
}
});
If you tell Papa there is a header row, each row will be organized by field name instead of index.
// Key data by field name instead of index/position
var results = Papa.parse(csv, {
header: true
});
Everything is parsed as strings. If you want numbers and booleans, you can enable dynamic typing to do the conversion for you.
// Converts numeric/boolean data
var results = Papa.parse(csv, {
dynamicTyping: true
});
Okay, first off: that's really weird. But fortunately, you can skip those lines... just specify the comment string.
// Mostly found in academia, some CSV files
// may have commented lines in them
var results = Papa.parse(csv, {
comments: "#"
});
Papa handles errors pretty well. The CSV standard is somewhat loose ambiguous, so Papa is designed for edge cases. For example, mismatched fields won't break parsing.
// Example error:
{
type: "FieldMismatch",
code: "TooManyFields",
message: "Expected 3 fields, but parsed 4",
row: 1
}
Sure, but it's not required. You can use jQuery to select file input elements and then parse their files. Papa exposes its file parsing API as a jQuery plugin only when jQuery is defined. Papa Parse has no dependencies.
$("input[type=file]").parse({
config: {
complete: function(results, file) {
console.log("This file done:", file, results);
}
},
complete: function() {
console.log("All files done!");
}
});
Call unparse() instead of parse(), passing in your array of arrays or array of objects. Papa will figure it out.
// Output is a properly-formatted CSV string.
// See the docs for more configurability.
var csv = Papa.unparse(yourData);
Lil' Papa (minified) for production use
Fat Papa (un-minified) for development
npm
$ npm install papaparse
bower
$ bower install papaparse