A comprehensive CSV to JSON conversion library for Node.js with streaming support, extensive customization, and high-performance parsing capabilities.
npx @tessl/cli install tessl/npm-csvtojson@2.0.0csvtojson is a comprehensive Node.js CSV parser that converts CSV data to JSON with extensive customization options. It strictly follows RFC 4180 CSV standards and provides high-performance parsing capabilities for processing millions of lines of CSV data. The library supports both streaming and batch processing modes, includes browser compatibility, and offers both programmatic API and command-line interface.
npm install csvtojsonimport csvtojson from "csvtojson";
import { Converter } from "csvtojson";For CommonJS:
const csvtojson = require("csvtojson");
const { Converter } = require("csvtojson");import csvtojson from "csvtojson";
// Parse CSV from file
const jsonArray = await csvtojson()
.fromFile("./data.csv");
// Parse CSV from string
const jsonArray = await csvtojson()
.fromString("a,b,c\n1,2,3\n4,5,6");
// Parse with custom options
const jsonArray = await csvtojson({
delimiter: ",",
noheader: false,
trim: true
})
.fromFile("./data.csv");
// Stream processing
csvtojson()
.fromFile("./large-file.csv")
.subscribe((jsonObj, lineNumber) => {
console.log(`Line ${lineNumber}:`, jsonObj);
});csvtojson is built around several key components:
Converter instances with optional parametersCSVError class with specific error types for parsing issuesPrimary CSV parsing functionality with factory function interface and extensive configuration options.
function csvtojson(
param?: Partial<CSVParseParam>,
options?: TransformOptions
): Converter;
interface CSVParseParam {
delimiter: string | string[];
quote: string;
trim: boolean;
noheader: boolean;
headers?: string[];
output: "json" | "csv" | "line";
// ... 80+ additional parameters
}Advanced streaming capabilities for large CSV files with input sources from files, streams, and strings.
class Converter extends Transform {
fromFile(filePath: string, options?: CreateReadStreamOption): Converter;
fromStream(readStream: Readable): Converter;
fromString(csvString: string): Converter;
then<TResult1, TResult2>(
onfulfilled?: (value: any[]) => TResult1 | PromiseLike<TResult1>,
onrejected?: (reason: any) => TResult2 | PromiseLike<TResult2>
): PromiseLike<TResult1 | TResult2>;
}Preprocessing hooks for raw data and individual lines before parsing occurs.
interface Converter {
preRawData(onRawData: PreRawDataCallback): Converter;
preFileLine(onFileLine: PreFileLineCallback): Converter;
subscribe(
onNext?: (data: any, lineNumber: number) => void | PromiseLike<void>,
onError?: (err: CSVError) => void,
onCompleted?: () => void
): Converter;
}
type PreRawDataCallback = (csvString: string) => string | PromiseLike<string>;
type PreFileLineCallback = (line: string, lineNumber: number) => string | PromiseLike<string>;Comprehensive configuration system supporting delimiter detection, column filtering, type conversion, and output formatting.
interface CSVParseParam {
delimiter: string | string[];
ignoreColumns?: RegExp;
includeColumns?: RegExp;
flatKeys: boolean;
checkType: boolean;
colParser: {[key: string]: string | CellParser | ColumnParam};
nullObject: boolean;
downstreamFormat: "line" | "array";
// ... additional parameters
}Custom error handling with specific error types for parsing issues and validation.
class CSVError extends Error {
static column_mismatched(index: number, extra?: string): CSVError;
static unclosed_quote(index: number, extra?: string): CSVError;
constructor(err: string, line: number, extra?: string);
toJSON(): {err: string, line: number, extra?: string};
}Complete command-line tool for CSV conversion with extensive options and examples.
# Basic usage
csvtojson input.csv
# With options
csvtojson --delimiter=";" --noheader input.csv
# Output to file
csvtojson input.csv > output.jsoninterface CreateReadStreamOption {
flags?: string;
encoding?: string;
fd?: number;
mode?: number;
autoClose?: boolean;
start?: number;
end?: number;
highWaterMark?: number;
}
type CellParser = (
item: string,
head: string,
resultRow: any,
row: string[],
columnIndex: number
) => any;
interface ColumnParam {
flat?: boolean;
cellParser?: string | CellParser;
}