CSV, JSON, XML & Excel Converter

Convert between CSV, TSV, JSON, JSON Lines, XML and Excel (.xlsx) by pasting or opening a file. Values stay as text by default, so zero-padded postal codes, phone numbers and long IDs are never changed. Everything runs in your browser; your data is not uploaded.

On-device・No upload

Your files and input are processed only inside your browser on this device and are never uploaded to our servers.

Convert to
Input

Drop a file here

Your data is processed in this browser and never uploaded.Accepts: CSV / TSV / JSON / JSONL / XML / XLSXUp to 50 MB per filePaste (Ctrl+V) also works
Result
Enter data or press “Try the sample” and the converted result will appear here
Turns flattened column names (user.name, tags[0]) back into nested objects and arrays.
Line endings

By default every value is written as text, so zero-padded postal codes, phone numbers and long IDs stay intact. Even with inference on, numbers with a leading 0 and numbers of 16+ digits stay text.

XML and type rules

How XML is read

  • Attributes become keys named “@name” (e.g. <a id="1"> → {"@id": "1"}).
  • Element text becomes a string. Text that sits next to attributes or child elements goes under “#text”.
  • Elements that repeat with the same name become an array. A single element stays a plain value (not a one-item array).
  • An empty element <a/> becomes an empty string "". Comments and processing instructions are skipped; CDATA is treated as text.
  • Namespace prefixes stay part of the name (e.g. "ns:item"). xmlns, xmlns:* and xml:* attributes are kept as keys like “@xmlns”, but namespace URIs are not resolved.
  • XML is read by a built-in parser in your browser. External entities and DTDs are never loaded and entities declared in a DOCTYPE are never expanded.

How XML is written

  • Each row becomes one row element and each column becomes a child element. A column named “@name” becomes an attribute and “#text” becomes the text.
  • Names that XML does not allow are fixed: disallowed characters (spaces, / ( ) …) become “_”, a name starting with a digit or symbol gets a leading “_”, and names starting with “xml” (reserved) become “_xml…”. Japanese names are fine as they are.
  • Valid prefixed names such as “ns:item”, and the attributes xmlns, xmlns:* and xml:*, are written as they are (any other “:” becomes “_”). If a fixed name collides with a sibling name, “_2”, “_3” … is added.
  • & < > are escaped automatically; control characters that XML 1.0 cannot hold are removed.
  • Arrays become repeated elements and arrays inside arrays use <item>. A null value becomes an empty element. An empty array [] cannot be expressed in XML, so it is left out and reported.

Value types

  • Values from CSV, Excel and XML are written as text by default ("0123456" and "03-1234-5678" never change).
  • With inference on, 12 and 3.5 become numbers, true / false become booleans and null becomes null. Numbers with a leading 0 (007) and numbers of 16+ digits stay text to protect phone numbers and IDs.
  • To protect a column even with inference on, list it under “Columns to keep as text”.
  • JSON input keeps its original types and number notation (e.g. 20-digit IDs).

How to use

  1. Paste CSV, TSV, JSON, JSON Lines or XML into the input, or drop / choose a file (.csv .tsv .json .jsonl .xml .xlsx). The format is detected from the content and can be overridden.

  2. Pick the target under “Convert to”: CSV, TSV, JSON, JSON Lines, XML or Excel. The encoding of Shift_JIS CSV files is detected automatically, and for Excel workbooks you can choose the sheet.

  3. “Value types” defaults to “Keep as text”. Turn on inference only if you want numbers, booleans and null, and list columns such as postal codes under “Columns to keep as text”.

  4. Set how arrays are expanded when flattening nested JSON (a[0] or a JSON string), whether to rebuild nesting when turning a table into JSON, the XML root and row element names, and the CSV encoding (UTF-8, with BOM, Shift_JIS) and line endings (CRLF/LF).

  5. Check the result in the Table and Text views, review the row and column counts and warnings (ragged rows, duplicate keys, lost information), then copy or download it.

What it does

Defaults that never break leading zeros or long IDs

Values from CSV, Excel and XML are written as text by default. A postal code like 0123456 or a phone number like 03-1234-5678 stays exactly as it is, and Excel output uses text cells. Even with number inference on, numbers with a leading 0 and numbers of 16+ digits stay text, and you can exclude specific columns.

Reads and writes Shift_JIS

The encoding of a CSV (UTF-8, Shift_JIS, EUC-JP, UTF-16) is detected from its bytes, with a preview of the file start so you can spot mojibake. Output can be UTF-8, UTF-8 with BOM (for Excel) or Shift_JIS, and characters Shift_JIS cannot hold (such as emoji) are reported.

Nested JSON and tables, both ways

Nested JSON flattens to dot-notation columns such as user.name and tags[0]; turning a table back into JSON can rebuild the nesting from the same notation. Arrays can be split into columns or kept as a JSON string in one cell, and round trips are verified by automated tests.

Explicit XML rules

Attributes become “@name”, text becomes “#text”, and repeated sibling elements become an array. XML output lets you set the root and row element names, fixes invalid names by a documented rule (and lists the changes), and always escapes special characters. The reader never expands external or DOCTYPE entities and reports errors with line and column.

Check before you save

See the converted table and text side by side, with row and column counts and warnings for ragged rows, duplicate keys, information lost by flattening and characters Shift_JIS cannot hold. Large inputs run in a Web Worker with progress and a Cancel button.

Entirely in your browser

Your data and files are processed only inside this browser. Nothing is uploaded or stored, and no external conversion service is used. Once loaded, it also works without a connection.

Use cases

  • Expand a nested JSON API response into a CSV or .xlsx you can open in Excel
  • Convert a Shift_JIS CSV to UTF-8, or a UTF-8 CSV to a form Excel opens without mojibake (BOM or Shift_JIS)
  • Turn a CSV into JSON or Excel without losing leading zeros in postal codes, phone numbers or product codes
  • Inspect XML data (orders, product feeds, config) as a table, or build XML from a table
  • Move between CSV and JSON Lines (one JSON record per line) for logs and data pipelines
  • Edit a table as JSON and rebuild the original nesting (a.b, a[0])

Supported formats

Input

CSVTSVJSON (nested, arrays)JSON Lines (.jsonl / .ndjson)XMLExcel (.xlsx / .xlsm, multiple sheets)UTF-8 / Shift_JIS / EUC-JP / UTF-16 (auto-detected)

Output

CSV (UTF-8, with BOM, Shift_JIS; CRLF / LF)TSVJSON (array of objects or arrays; pretty or minified)JSON LinesXMLExcel (.xlsx)

Capability matrix

FeatureSupportNotes
Convert between CSV / TSV / JSON / JSON Lines / XML / xlsxSupported—
Format auto-detection (by content, overridable)Supported—
Encoding detection and Shift_JIS outputSupportedCharacters Shift_JIS cannot hold are reported
Protect leading zeros and long IDs (text by default)SupportedType inference is opt-in
Flatten nested JSON (a.b / a[0]) and rebuild itSupportedNot always exact, e.g. when a key exists in only some rows
XML attributes (@attr), text (#text) and repeated-element arraysSupported—
XML output with root / row names and name fixingSupported—
Read multi-sheet xlsxSupportedOutput is a single sheet
xlsx formatting, formulas, charts, images, macrosNot supportedFormulas become their values; formatting and charts are not carried over
Legacy .xls and password-protected filesNot supportedSave as .xlsx first
Formula-injection guard for CSV / TSV (neutralise values starting with = + - @)SupportedOptional (off by default). The number of affected values is always reported
XSLT, schema validation, external entities in XMLNot supportedExternal entities and DTDs are never loaded for safety
Keep the order of XML mixed content (elements inside text)PartialText is gathered under #text. Empty arrays [] are not written to XML
Auto-repair of JSON with comments or trailing commasNot supportedUse the JSON formatter and validator for that
Offline useSupportedWorks without a connection once loaded

Limits & notes

  • Input is limited to 50 MB, and tables to 5 million cells. Split larger data.
  • xlsx files whose unpacked size exceeds 300 MB (or that hold more than 10,000 entries) are rejected.
  • Reading xlsx is limited to 3 million cells; writing follows Excel’s limits (1,048,576 rows, 16,384 columns). Cells longer than 32,767 characters are truncated.
  • Flattening creates at most 10,000 columns. For deeply nested data or long arrays choose “One cell as a JSON string” or set “Rows location”.
  • Nesting depth is limited to 1,000 levels for JSON and XML. Rebuilding with array indexes (a[0]) supports indexes up to 10,000.
  • The text view shows the first ~60,000 characters. Copy works up to 2 million characters; use Download beyond that.
  • Number inference covers up to 15 significant digits. Numbers with a leading 0 and numbers of 16+ digits always stay text.
  • Excel drops leading zeros when it opens a CSV directly. Export as .xlsx to keep them.

Privacy & safety

Pasted data and opened files are processed only inside your browser. Nothing is uploaded or stored, and no external service is used, so customer lists and data containing API keys are safe to convert. Closing the page discards everything.

FAQ

Excel removes the leading zeros of postal codes and phone numbers when I open a CSV. What can I do?
When Excel opens a CSV it treats anything that looks like a number as a number and drops the leading zeros. The CSV itself is not damaged. Convert it to Excel (.xlsx) here and the values are saved as text cells, so the zeros stay. For other targets such as JSON, every value is also written as text by default.
My Shift_JIS CSV shows garbled text. Can this fix it?
When you open a file, the encoding (Shift_JIS, UTF-8, EUC-JP …) is detected and the start of the file is shown. If it is wrong, choose the right one under “Encoding”. For output you can pick UTF-8 with BOM or Shift_JIS, both of which open correctly in Excel on Windows.
What happens when I convert nested JSON to CSV? Can I get it back?
Objects are joined with dots (user.name) and arrays are split into columns (tags[0], tags[1]); arrays can also be kept as a JSON string in one cell. When converting the CSV back to JSON, turn on “Rebuild nesting from a.b / a[0] column names” and type inference to restore the original structure. A CSV cannot tell an empty string from null or from a missing key, so you choose how empty cells are treated.
How is XML converted to JSON or CSV?
Attributes become “@name” keys, element text becomes a string, and text next to attributes or children becomes “#text”. Repeated elements with the same name become an array (a single element does not). For CSV, repeated elements become rows and attributes and child elements become columns such as @id and address.city.
Can it handle large files, and are they uploaded?
It converts up to 50 MB and 5 million cells. Processing runs in a Web Worker so the page stays responsive, with progress and a Cancel button. Files are never sent anywhere.
Numbers and true/false are written as strings. Why?
That is the safe default. Set “Value types” to “Infer numbers, booleans and null” to turn 12 into a number and true into a boolean. Numbers with a leading 0 and 16+ digits stay text, and you can list further columns under “Columns to keep as text”.

Last updated: