Paste JSON and get readable Markdown. A list of records becomes a table; anything nested becomes an indented list.
Records become a table, nested data becomes a list. Runs in your browser, nothing uploaded.
Converted — share it as a page.
Publish this as a live page in one click. No account to start.
What you want out of this depends entirely on what you put in, and most converters ignore that. An array of flat records — an API response, a database export, a CSV somebody already turned into JSON — wants to be a table; two hundred records as a bullet list is unreadable. Anything genuinely nested wants to be an indented list, because a table cannot express depth without flattening it into a lie.
So this converter looks at the shape first. It also handles the two things that quietly break Markdown tables: a | inside a value, which splits the row into the wrong number of columns with no error anywhere, and a record missing a field, which shifts every later value under the wrong heading. Everything runs in your browser — the JSON never leaves your machine, which matters when it is a production export.
Paste your JSON above, or upload a .json file. Invalid JSON does not blank the pane — it tells you what the parser objected to, so you can keep typing.
The right pane shows the Markdown. A flat array of objects becomes a table whose columns are the union of every record’s keys, in first-seen order; nested data becomes a list with bold keys.
Copy it, download it as a .md, or publish it as a page at a link so the table is readable by someone who does not want the raw JSON.
An analyst pulls 40 rows out of an internal API to put in a weekly update. Three of the rows have a note field the others do not, one note contains the string Q3 | provisional, and two records have a null owner because the seat is unfilled.
Run through a naive converter, all three of those turn into silent damage. The ragged key set shifts the short rows one column left, so a revenue figure appears under owner. The pipe splits its row into four columns where the header has three, and the renderer shows a mangled table without complaining. The nulls disappear entirely, so "nobody owns this region" reads as "this cell was not important". Pasted here, the short rows get empty cells in the right columns, the pipe is escaped so the row survives, and the nulls render as null — which is the fact the person reading the update is actually checking for.
A table when the top level is an array and every element is an object whose values are all scalars — strings, numbers, booleans or null. As soon as one value is itself an object or an array, the data has depth a table cannot show, so the output becomes an indented list instead. A tabular array nested under a key still renders as a table in place.
It is escaped as \|, which is what keeps the row intact. This is the single most common way a generated Markdown table breaks: one unescaped pipe makes the row a different width from the header, and every renderer displays something wrong rather than raising an error. Newlines inside a value are flattened to spaces for the same reason — a literal newline ends the row.
No, deliberately. null renders as null and an empty string renders as an empty cell. In an export those are different facts — "the field is present and empty" versus "there is no value" — and collapsing them loses the one people usually check for. false and 0 are kept for the same reason; they are data, not absence.
Not on this page. If what you have is a Markdown table and you want structured data, the Markdown to CSV converter gets you to a format every language parses in one line, which is usually the shorter path than a bespoke JSON shape.
No. The parse and the conversion both happen in your browser, so nothing is sent and nothing is stored. That matters here more than on most converters, because the realistic input is a production export with real customer rows in it.
Links gratuitos duram 7 dias com uma conta gratuita. Em um plano pago, cada página que você publica fica online permanentemente.
Ver preços