Free tool
JSON to Markdown converter
Paste a JSON document or drop a .json file and get Markdown back: headings become #, lists become bullets, tables become GFM tables. It reads the schema the Markdown to JSON converter writes, so a document survives the round trip. Everything runs in this tab — nothing is uploaded.
or drop a .json file onto this box
Supported block types
heading depth (1-6), text
paragraph text
code lang, text
math text
blockquote blocks
list ordered, start, items [ text, checked, list ]
table head, rows, align
hr -
html text
frontmatter text
def id, href, title
raw textRuns entirely in your browser — your file is never uploaded.
How to convert JSON to Markdown
- Paste JSON into the box above, drop a
.jsonfile on it, or press Load sample to start from a working document. The Markdown is rebuilt as you type, and a problem is explained under the box. - Each block is written out in order: a
headingbecomes#–######, aparagraphbecomes text, alistbecomes bullets (numbered whenorderedis true), atablebecomes a GFM table andcodebecomes a fenced block. - Copy the Markdown, download it as a
.mdfile, or open it in the editor to check the rendering and keep editing.
What the converter accepts
- A document object —
{"blocks": [...]}— or a bare array of blocks, which is what a quickJSON.parseof a list gives you. A block that is not an object is reported with its position instead of being skipped. textis written out as Markdown, exactly as it appears. If your strings are plain text and not Markdown, tick Escape Markdown syntax so a name likeC# *Guide*is not read as formatting.- A nested list lives in an item’s
listfield, and a task item setscheckedtotrueorfalse. Unknown block types are reported rather than guessed at, so a typo cannot quietly swallow a section.
Frequently asked questions
Which JSON shape does it expect?
The one the Markdown to JSON converter produces: {"blocks":[{"type":"heading","depth":2,"text":"Install"}]}. A plain array of those blocks works too, and a block with no type but a text field is treated as a paragraph.
Why do I get an error about an unknown type?
Because a block’s type is missing or misspelt. The message gives the block’s position in the array, and the reference panel under the tool lists every supported type with its fields.
Is my JSON uploaded?
No. Parsing and conversion happen in this browser tab, file drops included; nothing is sent anywhere and there is no server-side step.
How are tables, code and nested lists handled?
Tables keep their header and column alignment, a pipe inside a cell is escaped, and a code sample that contains a fence gets a longer fence so it cannot end early. Nested lists are indented under their parent item.
Need JSON from Markdown again?
The Markdown to JSON converter reads the same schema, and the editor renders the Markdown with live preview before you export it to PDF, HTML or DOCX.
Open the Markdown Viewer