JSON → Markdown
Convert JSON to Markdown — tables or nested lists, in your browser
Render any JSON as a clean Markdown table (for arrays of flat objects) or a nested unordered list (for anything else). Handles pipe escaping, multiline cells, and big payloads — all client-side.
Table mode renders an array of flat objects as a GitHub-flavored pipe table. Anything else falls back to a nested unordered list — perfect for config files, package manifests, or API response inspection.
How to convert JSON to Markdown
- Paste JSON into the left pane, or click Open .json to load a file.
- Pick a mode — Table for flat arrays of objects, Nested list for everything else.
- Copy the output and paste it into your README, docs page, or bug report.
If the JSON is malformed, the error message appears under the input so you can fix syntax without leaving the page.
When to convert
- READMEs that document API response shapes — render an example response as a Markdown table or tree.
- package.json visualization — paste a slice of dependencies or scripts and copy a clean Markdown list for release notes.
- Bug reports — drop a JSON payload into a GitHub issue as a readable table instead of a wall of braces.
- AI prompts — many LLMs answer faster and more accurately when JSON is presented as a Markdown table.
Table mode example
[
{ "name": "Ada", "role": "Editor", "active": true },
{ "name": "Bob", "role": "Reviewer", "active": false }
]
Produces:
| name | role | active |
| ---- | -------- | ------ |
| Ada | Editor | true |
| Bob | Reviewer | false |
Nested list mode example
{
"name": "my-package",
"engines": { "node": ">=20" },
"scripts": { "dev": "next dev", "build": "next build" }
}
Becomes:
- **name**: my-package
- **engines**
- **node**: >=20
- **scripts**
- **dev**: next dev
- **build**: next build
Companion tools
- Markdown Table Generator — build a table visually.
- CSV ↔ Markdown Table — the spreadsheet-friendly round trip.
- Markdown Table Transformer — sort, reorder, and trim the resulting table.
Privacy & data
All conversion runs inside your browser. No JSON is uploaded.
Frequently asked questions
- Table mode looks for an array of flat objects and emits a GFM pipe table — column headers come from the union of object keys, rows from each object. Any other input (nested objects, mixed types, primitives) is rendered as a nested unordered Markdown list with bold keys.
- Yes — switch to nested list mode (or let it fall back automatically). Each level indents with two spaces; primitive values appear inline with their key, and arrays/objects expand into sub-lists.
- Pipe characters in cell values are escaped to `\|`. Newlines inside cells are flattened to spaces so the row stays on one Markdown line. The resulting table renders cleanly on GitHub, Docusaurus, and most other GFM renderers.
- Table mode requires every element to be a flat object. If any value is itself an object or array, table mode falls back to nested-list mode automatically. Flatten upstream (`JSON.stringify` nested values, or pick representative fields) for a cleaner table.
- Not yet — that's a much harder problem (Markdown isn't fully structured). For tabular data, the [Markdown Table → CSV](/tools/markdown-csv-table) tool already lets you round-trip pipe tables back into spreadsheet-friendly data that's easy to JSON-ify.
- No. JSON parsing and Markdown rendering both happen inside your browser. Nothing leaves the tab.