JSON to Markdown
Paste JSON and get readable Markdown — arrays of objects as tables, nested data as lists or flattened columns. Paste a Markdown table to get JSON back.
JSON to Markdown, in whatever shape fits
JSON is great for machines and awkward to read in a pull request, a wiki page, or an LLM prompt. This JSON to Markdown converter turns it into something people can scan, and picks the layout from the shape of the data:
- Array of objects → table. One row per object, columns from the union of all keys (first-seen order), numbers right-aligned, pipes escaped.
- Flat object → key/value table. A two-column table of settings, a config file, or a single API record.
- Nested object → document. Simple fields become a bullet list, nested objects become headings, and arrays of objects inside become tables — ideal for turning an API response into readable docs.
- Anything → nested bullet list or code block. Force the layout when you want a compact outline, or a fenced ```json block for documentation.
When the table you want is buried inside a response — say { "data": [ … ], "meta": { … } } — the converter finds every array of objects and lets you convert just that one.
A JSON to Markdown table example
input.json
[
{ "id": 1, "name": "ada", "owner": { "team": "web" }, "tags": ["bug", "auth"] },
{ "id": 2, "name": "grace", "owner": { "team": "api" }, "tags": [] }
]output.md
| id | name | owner.team | tags |
| --: | ----- | ---------- | --------- |
| 1 | ada | web | bug, auth |
| 2 | grace | api | |The --: under id right-aligns the numeric column; owner.team is a flattened nested field. The CSV to Markdown converter explains the full Markdown table syntax and has a formatter for hand-written tables.
Convert a Markdown table to JSON format
Paste a Markdown table — from a README, a spec, or a chatbot answer — and get a JSON array of objects, one per row, keyed by the header. It's built to round-trip with the JSON → Markdown direction:
- Numbers, true/false, and null become real JSON types; 007 and very large integers stay strings so IDs aren't mangled.
- Dotted headers like owner.name are nested back into objects, and cells holding inline JSON (`["a","b"]`) are parsed back into arrays and objects.
- Empty cells can become "", null, or be left out; keys can stay as written or become camelCase or snake_case; duplicate headers get a suffix instead of overwriting each other.
- Escaped pipes (\|) are unescaped and <br> becomes \n. Output as pretty JSON, compact JSON, or JSON Lines.
Need the same table in a spreadsheet instead? The Markdown to Excel converter downloads it as an .xlsx or copies it straight into Google Sheets.
JSON to Markdown in Python and on the command line
Python — JSON to Markdown table
import json
import pandas as pd # pip install pandas tabulate
data = json.load(open("data.json"))
print(pd.json_normalize(data).to_markdown(index=False))jq — array of objects to a Markdown table
jq -r '(.[0] | keys_unsorted) as $k
| ($k | "| " + join(" | ") + " |"),
($k | map("---") | "| " + join(" | ") + " |"),
(.[] | [.[$k[]] | tostring] | "| " + join(" | ") + " |")' data.jsonBoth are fine for scripts, with caveats: the jq version takes its columns from the first object only, prints nested objects as raw JSON, and doesn't escape pipes, and pandas needs a Python environment. For Markdown to JSON in Python, read the table with pd.read_csv(io.StringIO(md), sep="|"), drop the empty edge columns and the --- row, then call df.to_json(orient="records").
Frequently asked questions
How do I convert JSON to Markdown?
Paste the JSON (or open a .json file) and the Markdown appears as you type. Auto mode picks the best layout: an array of objects becomes a table, a flat object becomes a key/value table, a list of values becomes a bullet list, and nested data becomes a document with headings, lists, and tables. You can force any layout, including a fenced JSON code block.
How do I convert JSON to a Markdown table?
An array of objects converts to a Markdown table with one row per object. The columns are the union of every object's keys, in the order they first appear, so objects with missing or extra fields still line up. Nested objects are flattened into dot-path columns like owner.name, or kept as inline JSON if you prefer.
How do I convert a Markdown table to JSON?
Switch to Markdown → JSON and paste the table. Each row becomes an object keyed by the header cells. Numbers, true/false, and null are detected (IDs with leading zeros like 007 stay strings), dotted headers like owner.name can be nested back into objects, and you can pick camelCase or snake_case keys. Copy the JSON or download it as .json or .jsonl.
Does it work with JSON Lines (NDJSON / JSONL)?
Yes. If the input isn't a single JSON document but every line is, it's read as JSON Lines — one record per line — and converted like an array. The reverse direction can output JSON Lines too.
Why won't my JSON parse?
The error shows the line and column where parsing stopped, with the line itself and a caret under the problem. The usual culprits are called out: trailing commas, single-quoted strings, unquoted keys, comments, and NaN or undefined values — all valid in JavaScript but not in JSON.
How are nested objects and arrays shown in a table?
With flatten on, { "owner": { "name": "Ada" } } becomes a column called owner.name. Arrays of plain values are joined with commas (bug, auth), and arrays of objects are kept as inline JSON in the cell. For deeply nested data, the document layout is usually more readable than one very wide table.
How do I convert JSON to Markdown in Python?
With pandas: pd.json_normalize(data).to_markdown(index=False). json_normalize flattens nested objects into dot-separated columns the same way this converter does, and to_markdown needs the tabulate package (pip install tabulate).
Is my JSON sent anywhere?
No. The conversion runs in your browser — nothing you paste or open is uploaded, so API responses with tokens or customer data stay on your machine.
Related free tools
See all free tools →Built something? Put it online in seconds
host0 is the cloud for small software: bring any coding agent, build the tool only you need — like this one — and say "deploy to host0". Live at a shareable URL, no servers to run.