Skip to main content

JSON to CSV

Turn a JSON list of objects into CSV.

JSON input

Ln 1, Col 1
JSON

Result

Your result will appear here

Add JSON above, then choose Convert.

Add JSON on the left, then choose Convert.

Waiting for input

Convert a JSON list of objects, or the first list of objects inside an object, to plain CSV text.

What is JSON to CSV?

JSON to CSV is a free online tool that turns JSON records, in your browser, into plain CSV text that a spreadsheet can open: one row per record, one column per name, and every value written as ordinary text.

It reads a list of objects, an object that holds such a list, or a single object. Nested objects become columns named with a dot path, such as address.city, and the tool tells you where the rows came from.

What it supports

  • Accepted: a list of objects, where each object is a row; an object that holds a list of objects, where the first such list is used; and a single object, which becomes one row. In a list at the top of the JSON, an item that is not an object, such as a number or a text, becomes a row with one column named value.
  • Where the rows come from: for an object, the tool goes through its members in the order they are written, going into nested objects before moving on, and uses the first list that is not empty and holds only objects. The result names its path, such as employees.employee. If there is no such list, the object itself is one row.
  • The header row lists every column found in any row, in the order each is first seen. A nested object adds one column per value, named with its path joined by dots, such as address.city. When a row has no value for a column, its cell is empty.
  • Cells are plain text. A text is written as it is, a number as it was written (9007199254740993, 2.370 and 1e400 come out unchanged), true and false as they are, and null as an empty cell. A nested list is written whole as compact JSON, such as [1,null], and an empty nested object as {}.
  • The file uses commas between cells and a CRLF line break between rows (the line break RFC 4180 specifies). It is UTF-8 text with no byte order mark and no line break at the end. A cell is put in quotes only when it holds a comma, a double quote or a line break, and each double quote inside it is doubled.
  • An object with no members stays as a row of empty cells, as long as another row has at least one column. If no row has any column, the table would have none and the conversion is refused.

Good to know

  • Types are not kept: the text "1" and the number 1 both become 1, and null, an empty text and a missing name all become an empty cell. If you need the type of every value kept, JSON to YAML records it.
  • Only one list is used. When an object holds several lists of objects, the others are left out, and so are the members that sit next to the list. The result names the list that was used, so check that it is the one you wanted.
  • Two members that would get the same column name, such as a member called a.b and a member b inside an object a, are refused, because one value would overwrite the other. Names repeated inside one object, and strings with unpaired surrogate escapes, are refused as well, instead of guessed.
  • Spreadsheet risk: spreadsheet programs may reinterpret a file when you open it. A cell that starts with =, +, -, @, a tab or a carriage return and is not a plain number, such as =1+1 or @SUM(A1), is written exactly as it is, and a spreadsheet may run it as a formula; the tool shows a spreadsheet warning only when such a cell exists, header names included. Numbers, dates and numbers with leading zeros may also be retyped by a spreadsheet. The tool changes none of your data to prevent this: it adds no apostrophes and escapes nothing on your behalf.
  • When that warning appears, you must confirm that you understand the risk before you can copy or download. When you open the file in a spreadsheet, import it as text instead of double-clicking it, and know that retyping a cell can still turn it into a formula. This does not make opening a CSV file completely safe, and the site cannot promise that a file is safe in every spreadsheet program.
  • A table with many columns and many rows can produce a result larger than your input. If it passes the size limit, it is refused with an incomplete preview (see below).

How do I use JSON to CSV?

  1. Paste or type your JSON in the input box. It can be a list of objects, an object that holds a list of objects, or a single object. Nothing runs while you type.
  2. Press “Convert”. CSV has no indentation option.
  3. Read the CSV next to your input. When the rows were taken from inside an object, the result says which part, for example employees.employee. If a cell could run as a formula in a spreadsheet, a spreadsheet warning appears in the result area. If the conversion is refused, the message says why.
  4. Press “Copy” to put the CSV on your clipboard, or “Download” to save converted.csv. If the spreadsheet warning appeared, tick “I understand the spreadsheet risk described in the warning.” first: until you do, “Copy” and “Download” stay unavailable.

Examples

A list of records

Paste this JSON and press “Convert”. Each object becomes a row and each name becomes a column. Text comes out as written, without quotes, and numbers come out exactly as they were written. A cell is put in quotes only when it holds a comma, a double quote or a line break.

[{"id":1,"name":"Ada Lovelace","city":"London"},{"id":2,"name":"Grace Hopper","city":"New York"}]
id,name,city
1,Ada Lovelace,London
2,Grace Hopper,New York

An empty list

A list with no items has no rows to write, so the conversion is refused and the message says why.

[]

The array is empty. JSON to CSV needs at least one item to make a row.

Records inside an object

Many API responses wrap their records in an object. JSON to CSV goes through the object and uses the first list of objects it finds, here employees.employee, and the result names that path. The other members of the object are not in the CSV.

{"employees":{"employee":[{"id":"1","firstName":"Tom","lastName":"Cruise"},{"id":"2","firstName":"Maria","lastName":"Sharapova"}]}}
id,firstName,lastName
1,Tom,Cruise
2,Maria,Sharapova

Nested objects and lists

The object address becomes two columns, address.city and address.zip. The list tags stays whole in one cell as compact JSON, which is why that cell is in quotes (it holds commas and double quotes). true comes out as true and null becomes an empty cell.

[{"id":1,"address":{"city":"Recife","zip":"50000-000"},"tags":["a","b"],"active":true,"note":null}]
id,address.city,address.zip,tags,active,note
1,Recife,50000-000,"[""a"",""b""]",true,

Different values that look the same

A CSV cell is just text, so types are lost. The number 1 and the text "1" both come out as 1, and an empty text, null and a missing name all come out as an empty cell. The name late is missing from the first record.

[{"a":1,"s":"1","e":"","n":null},{"late":true}]
a,s,e,n,late
1,1,,,
,,,,true

Limits and privacy

Size limits

  • Input: up to 2,000,000 bytes of UTF-8 text (about 2 MB). Accented letters and emoji take more than one byte each. Larger input is rejected.
  • Result: also up to 2,000,000 bytes. If the complete result would be larger, the tool shows only an incomplete preview of the first 100,000 bytes, and that preview cannot be copied or downloaded.
  • Nesting: up to 256 levels of objects and lists inside each other. Deeper JSON is refused because it is beyond what the tool processes.
  • Time: a run that takes longer than its time limit is stopped. Try a smaller input.

Is my text sent to a server?

No. The text you type or paste, or open from a local file, is processed locally in your browser, in a dedicated Web Worker. It is never uploaded or sent to the server (a file you open is read in your browser only), and it is not written to storage, cookies or the address bar.

“Copy” puts the result on your clipboard and “Download” saves it as a file, but only when you press the button. The file is created in your browser, so nothing is uploaded.

For the full details, see the Privacy Policy

Related tools and pages

Your text stays in the page when you switch tools in the same tab, so you can try the same text in another tool. Reloading or closing the tab ends it.

All tools

Format, validate and convert JSON, YAML, XML, CSV, HTML, CSS and Markdown, plus Base64, URL and JWT.

JSON

  • JSON Formatter

    Format JSON with one consistent layout: even indentation, one value per line, your values untouched. Runs the same formatter as JSON Beautifier.

  • JSON Validator

    Check whether your text is valid JSON. If it is not, see the first problem with its line and column, highlighted in your text.

  • JSON Diff

    Compare two JSON documents by structure, ignoring key order, and see every added, removed and changed path in one list.

  • JSON Schema Validator

    Validate JSON against a JSON Schema (draft 2020-12, or draft-07 through $schema) and see each error with the path where it occurs.

  • JSON Schema Generator

    Generate a JSON Schema (draft 2020-12) from a sample JSON document, ready to copy and refine.

  • JSON Beautifier

    Beautify minified or unevenly spaced JSON into readable, indented text, with your values untouched. Runs the same formatter as JSON Formatter.

Convert JSON

  • JSON to CSV

    Convert a JSON list of objects, or the first list of objects inside an object, to plain CSV text.

  • CSV to JSON

    Convert CSV to a JSON array of objects, using the header row as keys. Comma, semicolon and tab separators are detected, and values stay as text.

  • JSON to XML

    Convert JSON to plain, readable XML, with your numbers and text copied exactly as written.

  • XML to JSON

    Convert XML to JSON, with attributes as @name keys and repeated elements gathered into arrays so the structure carries over.

  • JSON to YAML

    Convert JSON to readable block YAML with 2 or 4 spaces of indentation, keeping every value and every number exactly as you wrote it.

  • YAML to JSON

    Convert YAML to JSON with anchors and aliases resolved. A file with several documents becomes a JSON array.

YAML

  • YAML Validator

    Check whether your YAML is valid under the YAML 1.2 Core rules, in one or several documents, and see the line and column of the first problem.

  • YAML Viewer

    Explore a YAML document as a tree you can open and close, with anchors, tags and aliases marked on the row where they appear.

  • YAML Formatter

    Format YAML with consistent indentation while keeping comments and values.

HTML, XML and CSS

  • HTML Formatter

    Format HTML into readable, indented markup. The result is plain text: scripts do not run and nothing in your HTML is loaded.

  • XML Formatter

    Format XML with clear indentation while preserving its content and meaning.

  • CSS Beautifier

    Beautify minified CSS into readable rules, one declaration per line, without changing what the CSS does. Runs the same formatter as CSS Formatter.

  • CSS Formatter

    Format CSS you maintain with one consistent style: the same indentation, spacing and spelling everywhere. Runs the same formatter as CSS Beautifier.

Encode & Decode

  • Base64 Encode/Decode

    Encode text to Base64 or decode Base64 back to text as UTF-8, with an option for the URL-safe Base64URL alphabet.

  • URL Encode/Decode

    Encode or decode text with %XX sequences, either as a URL component or as a full URL whose separators stay intact.

  • JWT Decoder

    Decode a JWT in your browser to read its header and payload, see the exp, iat and nbf dates and whether it has expired. The signature is not verified.

Markdown

New
  • Markdown Editor

    Free online Markdown editor and viewer: write or open an MD file, see a live GFM preview, then copy or download your Markdown.

  • Markdown to PDF

    Convert Markdown to PDF in your browser. Pick A4 or Letter paper and the margins, preview the document and download a real PDF file.

  • Markdown to Text

    Convert Markdown to plain text without losing code or punctuation. Choose how links appear, then copy the text or download a TXT file.

  • Markdown to Word

    Convert Markdown to Word: download an editable DOCX file that keeps headings, lists, tables and links. It runs in your browser.

  • Markdown to HTML

    Convert Markdown to HTML in your browser. Get an HTML fragment or a full document, check the preview, then copy or download it.

  • Markdown Table Generator

    Markdown table generator with an editable grid and column alignment. Import CSV or TSV, then copy or download the Markdown table.

  • Word to Markdown

    Convert Word to Markdown: open a DOCX file and get its headings, lists, links and tables as editable Markdown, all in your browser.

  • HTML to Markdown

    Convert HTML to Markdown from pasted markup or a local file. Scripts never run; headings, lists, links and simple tables carry over.

  • Markdown Formatter

    Markdown formatter that tidies your source and lists style suggestions for headings, spaces and the final newline. Review it before you copy.

  • Markdown to Image

    Convert Markdown to an image: choose the width and theme, preview your note or table and download a PNG or JPEG file.

  • Markdown to Rich Text

    Convert Markdown to rich text and copy it, formatted, into a document editor. Plain text is the fallback when rich copy is unavailable.

  • Markdown Table to JSON/CSV

    Convert a Markdown table to JSON or CSV. Review the headers and pick each column's type, so IDs and leading zeros stay as they are.

  • Excel to Markdown

    Convert Excel to Markdown: open an XLSX file, pick a sheet or a cell range and get a Markdown table without uploading the file.

  • Markdown to Excel

    Convert Markdown tables to Excel: download an XLSX file whose cells stay text, so leading zeros survive and nothing becomes a formula.

  • Paste to Markdown

    Paste to Markdown: turn copied rich text or HTML into Markdown. For plain text, apply heading and list actions yourself, then copy.

  • Markdown Compare

    Markdown compare: paste two versions or open two files and see which lines were added or removed in the source text.

  • Markdown to Mind Map

    Convert Markdown to a mind map: headings and lists become a map you can navigate and export. Built with Markmap, no account needed.

  • Mermaid Editor

    Mermaid live editor in your browser: write diagram code, see the preview and any syntax errors, and export SVG or PNG without an account.

  • Discord Markdown Preview

    Discord Markdown preview: check bold, code blocks and spoilers in an approximate local preview, then copy the message. No Discord account.

  • Obsidian Markdown Converter

    Obsidian Markdown converter: adapt [[wiki links]] and embeds to standard Markdown and list the files your note refers to.

  • GitHub README Viewer

    GitHub README viewer: paste or open a README, see a GFM preview and set a base URL for relative links. Nothing is fetched from GitHub.

  • PDF to Markdown

    Convert PDF to Markdown locally: extract its text layer or run OCR on selected pages without text. Review and edit before copying or downloading.

  • Image to Markdown

    Convert an image to Markdown with OCR in your browser: read text from a PNG or JPEG, correct it, then copy or download. Accuracy varies.