JSON to Markdown Table Converter
Paste a JSON array of objects (or arrays) and get a Markdown table as you type, with the keys as column headers.
Sample data shown — paste or drop your own to replace it.
How to convert JSON to a Markdown table in 3 steps
Paste the JSON array
Paste an array of objects such as [{"id": 1, "name": "A"}] into the Paste JSON box, or upload a .json file. An array of arrays works too, with the first array as the header, and so does an object that wraps a list, such as {"data": [...]}.
Check the columns
Every key becomes a column, in the order it first appears. Open Edit grid to rename headers, fix cells or set alignment, or use Tools › Auto-align for numbers.
Copy the Markdown
Click Copy Markdown and paste it into GitHub, GitLab, Obsidian or any Markdown file, or download it as .md.
Example
[
{ "id": 1, "name": "Keyboard", "price": 129.99, "tags": ["usb", "rgb"], "inStock": true },
{ "id": 2, "name": "Mouse | wireless", "price": 79.50, "inStock": false },
{ "id": 3, "name": "USB-C hub", "price": null, "tags": [], "inStock": true }
]| id | name | price | tags | inStock | | --- | ----------------- | ------ | ------------- | ------- | | 1 | Keyboard | 129.99 | ["usb","rgb"] | true | | 2 | Mouse \| wireless | 79.5 | | false | | 3 | USB-C hub | | [] | true |
Options explained
- Paste JSON box
- Converts 150 ms after you stop typing, and immediately on paste. The badge shows the detected format; the status line shows rows × columns or what went wrong.
- Upload file
- Reads a file from your computer without uploading it anywhere. A .json file is parsed as JSON directly. CSV, TSV, HTML, Markdown, text and Excel files are accepted too..json · .csv · .tsv · .html · .md · .txt · .xlsx · .xls · .ods
- Paste / Sample / Clear
- Paste reads the clipboard, Sample loads an example array, Clear empties the box.
- Edit grid / Markdown tabs
- Rename headers, fix cells, set alignment or reorder columns after converting, with undo and redo. The Markdown tab shows the source.
- Tools
- Auto-align (numbers right, text left), header case, transpose, and quick or deep clean for stray spaces and blank rows.Auto-align · UPPER · lower · Title Case · Transpose · Quick clean · Deep clean
- Flavor and Spacing
- GFM suits GitHub, GitLab and most editors. Padded lines up the pipes in the source; Compact removes the padding; No outer pipes drops the leading and trailing |.GFM · MultiMarkdown · Pandoc Pipe · reStructuredText · Org-mode · Padded / Compact / No outer pipes
- Collapsible <details>
- Wraps a long table in <details><summary> so it starts collapsed on GitHub.
- Output tabs, Download, Copy link
- Switch the output to HTML, CSV, TSV, JSON, LaTeX, SQL or Jira. Download saves the active format, .xlsx, .csv or .png. Copy link stores the table after #md= in the URL, which browsers do not send to a server.
Convert to and from other formats
Also useful
Convert other formats to Markdown
- CSV to Markdown TableConvert CSV text or .csv files, including quoted cells.
- Excel to Markdown TablePaste cells copied from Excel straight into a Markdown table.
- Google Sheets to Markdown TablePaste a copied range or a public sheet URL.
- TSV to Markdown TableConvert tab-separated text into a Markdown table.
- HTML Table to MarkdownConvert <table> markup into a Markdown table.
- SQL to Markdown TableConvert MySQL, PostgreSQL or SQLite CLI query output.
- Word Table to MarkdownPaste a table copied from Word or Google Docs.
- Web Table to MarkdownCopy a table from any web page and paste it here.
- Image to Markdown TableTurn a screenshot or photo of a table into Markdown in your browser.
- PDF to Markdown TableExtract a table from a PDF page, with OCR for scans.
- Universal Table to MarkdownPaste anything tabular; the format is detected for you.
Convert Markdown to…
- Markdown Table to CSVExport a Markdown table as RFC 4180 CSV.
- Markdown Table to TSVCopy as tab-separated values that paste cleanly into Excel and Sheets.
- Markdown Table to HTMLExport semantic <table> markup.
- Markdown Table to JSONExport rows as an array of JSON objects.
- Markdown Table to LaTeXExport LaTeX tabular code for papers and Overleaf.
- Markdown Table to SQLGenerate CREATE TABLE and INSERT statements.
- Markdown Table to ExcelDownload a real .xlsx with numbers, bold header and one sheet per table.
- Markdown Table to Google SheetsCopy a table that pastes cleanly into Google Sheets.
- Markdown Table to WordCopy a formatted table into Word or Google Docs, or download .docx.
- Markdown Table to ConfluenceWiki markup, storage format or a rich copy for the Cloud editor.
- Markdown Table to JiraConvert to Jira and Confluence wiki markup.
- Markdown Table to ImageRender the table as a PNG or SVG for slides and posts.
About this tool
Paste a JSON array and the Markdown table appears as you type, ready for a README, an API doc or a pull request. Each object is a row and each key a column; objects with different keys get a column per key, with empty cells where a key is missing. Nested objects become dot-notation columns such as address.city, arrays are written as compact JSON text, a wrapper like {"data": [...]} or a single object is unwrapped, and pipes in values are escaped. Invalid JSON gets an error with the line and column. Everything runs in your browser, so the JSON is never uploaded.
- Array of objects: keys become the header row
- Array of arrays: the first array is the header
- Objects with different keys get a column per key; gaps stay empty
- Nested objects become dot-notation columns (address.city); arrays stay compact JSON text
- Wrapper objects like {"data": [...]}, single objects and JSON Lines are unwrapped
- Invalid JSON shows the error with its line and column
- Escapes | in values so columns never shift
- Upload a .json file or paste an API response
- Edit cells and alignment before copying
- Runs in your browser; JSON is not uploaded
Technical details
How JSON is mapped to a Markdown table
The input is a JSON array, or an object that wraps one. Each element becomes a row, and the result is written as a GFM pipe table. Values are shown as text, not as JSON types, so the table reads the way the data would in a spreadsheet.
- Array of objects: The columns are the union of all keys, in the order they first appear. An object without a key gets an empty cell.
- Array of arrays: The first inner array is the header and the others are rows. Blank header cells are named “Column N” and short rows are padded.
- Values: Strings, numbers and booleans are written as text. null becomes an empty cell, a nested object is flattened into dot-notation columns (address.city), and an array becomes compact JSON text such as ["usb","rgb"].
- Numbers: They go through JavaScript, so 79.50 appears as 79.5, and integers beyond 9,007,199,254,740,991 lose precision. Quote such values as strings in the JSON to keep them exact.
- Pipes: A | inside a value is written as \| so it does not create an extra column.
- Other shapes: An object that holds one list of records ({"data": [...]}, {"count": 2, "items": [...]}) uses that list; any other single object becomes a Key / Value table; an array of plain values becomes one “Value” column; JSON Lines (one value per line) is read as an array.
- Errors: Text that starts like JSON but does not parse shows “Invalid JSON”, the problem, and its line and column, instead of being read as CSV.
Tips and best practices
Wrapped responses work as they are
API responses often wrap rows in {"data": [...]} or {"items": [...]}. Paste the whole response; if it holds several lists, copy from the opening [ to the matching ] of the one you want.
Check flattened columns
A nested object becomes columns such as address.city. Arrays stay in one cell as JSON text; rename or delete columns in Edit grid.
Right-align numbers
JSON has no alignment, so every column starts left-aligned. Tools › Auto-align right-aligns the numeric columns.
Common problems and fixes
The table is full of braces, quotes and commas
Cause: The text was not read as JSON, for example because it is wrapped in a code block or has text before the opening [ or {. Invalid JSON that starts with [ or { shows an “Invalid JSON” error with a line and column instead.
Fix: Paste only the JSON, or fix the syntax the error points to, and paste again.
A single object gives a Key / Value table instead of one row
Cause: A single object that is not a wrapper around a list is read as Key / Value pairs, one per row.
Fix: Wrap the object in square brackets, [ { ... } ], to get one row with a column per key.
A price shows 79.5 instead of 79.50
Cause: JSON numbers are parsed as numbers, so trailing zeros are not kept.
Fix: Edit the cell in Edit grid, or store the value as the string "79.50" in the JSON.
Uploading a .json file shows “Invalid JSON”
Cause: A file ending in .json is always parsed as JSON, and it did not parse. The message gives the line and column.
Fix: Fix the syntax at that position. A file with one JSON object per line (NDJSON) is accepted as it is.
Platform compatibility
| Platform | Support | Notes |
|---|---|---|
| GitHub & GitLab | Supported | The GFM output renders in READMEs, issues, PRs and wikis. |
| Obsidian | Supported | Renders in Reading view and Live Preview. |
| API docs (MkDocs, Docusaurus) | Supported | Pipe tables render in both through their GFM table support. |
| Pandoc | Supported | Reads pipe tables with its pipe_tables extension, enabled by default for Pandoc Markdown. |
| CommonMark core | Extension | Tables are not part of core CommonMark 0.31.2; the renderer needs a GFM table extension. |
Frequently asked questions
How do I convert JSON to a Markdown table?
Paste a JSON array of objects into the box above, or upload a .json file. The Markdown table is generated as you type: object keys become the header row and each object becomes a row. Click Copy Markdown and paste it where you need it.
What JSON shapes does it accept?
An array of objects, such as [{"id": 1, "name": "A"}], or an array of arrays, where the first inner array is the header. An object that wraps a list, like {"data": [...]} or {"count": 2, "items": [...]}, uses that list. A single object becomes a two-column Key / Value table, an array of plain values becomes one column, and JSON Lines (one object per line) is read as an array.
What happens if objects have different keys?
The table gets one column for every key that appears anywhere, in the order each key first appears. An object that lacks a key gets an empty cell in that column.
How are nested objects and arrays handled?
A nested object is flattened into dot-notation columns such as address.city, up to eight levels deep. An array stays in one cell as compact JSON text, for example ["usb","rgb"].
Why does 79.50 show as 79.5?
JSON numbers are parsed as numbers, so trailing zeros are lost and integers beyond 9,007,199,254,740,991 lose precision. Put the value in quotes in the JSON ("79.50") to keep it exactly, or edit the cell in Edit grid.
Why is my table full of braces and quotes?
A table of braces and quotes usually means the text was not read as a JSON array, for example when it was pasted inside a code block or with a prefix. Text that starts with [ or { but is not valid JSON (a trailing comma, single quotes, an unquoted key) shows an “Invalid JSON” error with its line and column instead of a table.
How do I right-align number columns?
Click Tools › Auto-align to right-align columns that are mostly numbers, or open Edit grid and set alignment from a column’s ▾ menu. The delimiter row then uses ---: for those columns.
Is my JSON uploaded anywhere?
No. Parsing and conversion run in your browser. A draft is saved in your browser’s local storage so a reload does not lose it, and Copy link puts the table after #md= in the URL, which browsers do not send to a server.