Skip to converter

TSV to JSON converter

Tab-separated files come out of databases, analytics tools and spreadsheet "save a copy" menus. This page reads the tab as the separator — never a comma inside a cell — and writes an array of JSON records. With the header option on, the first row supplies the field names; with it off you get positional arrays instead.

Fields are read as text unless they look like plain numbers.

Drop files here or TSV, up to 50 MB each, 10 at a time
    Add a file to start.

    Processed on your device. Files aren’t sent anywhere.

    No sign-up. Nothing to install.

    Why tabs make this safer than CSV

    A TSV row splits on literal tab characters, so commas inside a description, an address or a price need no quoting at all. That means a file exported by a database that never escaped anything still parses correctly here.

    The parser is still quote-aware: if a cell happens to contain tabs wrapped in double quotes, the quoted run is read as one field, doubled quotes collapse to one, and a newline inside quotes stays inside the cell rather than starting a new row.

    • Tabs are the delimiter; commas are ordinary text
    • Quoted cells may contain tabs and line breaks
    • Doubled quotes inside a quoted cell become one quote
    • A UTF-8 byte-order mark at the start of the file is dropped

    Rows that are entirely blank disappear

    A line with no content at all is skipped, so trailing blank lines and stray spacing between blocks do not turn into empty records. A row that has real tabs but empty cells is kept, because those cells carry structure.

    More tabs than header names

    Each row is matched to the header by position. Extra tabs in a row are ignored, and a row with fewer fields than the header leaves the missing keys as empty strings. Nothing is truncated or guessed.

    Header on or off

    With First row is a header enabled, row one becomes the keys and every later row becomes an object. An empty header cell is named column1, column2 and so on, so a malformed header still produces usable records.

    Turning the option off treats every row, including the first, as data: the output is an array of arrays. That is the right setting for files whose first line is already real content rather than labels.

    • Header on: array of objects keyed by the first row
    • Header off: array of arrays, rows kept in order
    • Duplicate header names collapse — the last column with that name wins
    • Blank header cells are named column1, column2, ...

    Readable indentation or compact output

    The Readable indentation toggle controls the JSON layout: two-space indentation for reading and diffing, or compact single-line output for feeding into another tool. The data itself is identical either way.

    Which cells become numbers

    A cell is converted to a JSON number only when it looks like a plain decimal: an optional minus sign, digits, and an optional fractional part. Everything else remains a string.

    That distinction matters for identifiers. 007 stays the string "007", so account codes, postcodes and ZIP codes keep their leading zeros, while a plain 1200 becomes the number 1200. Exponential forms such as 1.5e3 also stay strings.

    • Plain integers and decimals become JSON numbers
    • Leading-zero identifiers remain strings
    • 1.5e3 and other exponent notation remain strings
    • Very large integers typed as numbers can lose precision

    Empty cells and the difference from null

    An empty cell becomes an empty string, not null. Downstream code that distinguishes "no value" from "empty value" should check for the empty string, because this converter never invents null.

    Limits, privacy and typical input

    One file may be up to 50 MiB and you may convert up to 10 files in a batch. Parsing happens in this browser tab, so an export containing customer records never leaves the machine — there is no upload step and no account.

    Common sources are database text exports, analytics dumps and spreadsheet copies. The reported row count after conversion is a quick sanity check against the row count in the original file.

    • Up to 10 files, 50 MiB each
    • Row count is reported after conversion
    • Unicode text — Cyrillic, accents, CJK — is preserved as-is
    • Output file is named after the input with a .json suffix

    This is a shape change, not a round trip

    JSON to TSV flattens nested objects into dotted columns and writes arrays as JSON text inside a cell, so converting back does not restore the original file byte-for-byte. Quoting and typing are not symmetric; keep the original export if you need it verbatim.

    Questions

    Does a comma inside a TSV cell break the conversion?
    No. Tabs are the only delimiter, so commas, semicolons and quotes in the text are read as ordinary cell content.
    Will my product codes like 0042 keep their leading zeros?
    Yes. Cells with leading zeros do not match the plain-number pattern, so they stay strings in the JSON output. Plain numbers such as 42 become JSON numbers.
    What happens to a cell containing a line break?
    If the cell is quoted, the line break is kept inside that field and the row continues. An unquoted newline simply ends the row, which is how the input file was written.
    My header has the same column name twice. What is the result?
    JSON objects cannot hold duplicate keys, so the later column with that name wins and the earlier value is dropped. Rename duplicates in the source if both values matter.
    Is the file uploaded to a server?
    No. Parsing runs in your browser, so the file stays on your device; the JSON is offered as a download you choose to save.

    Share this converter

    More sharing options