Free tool

JSON to HTML table.

Paste an API response, a JSON array, or a file of NDJSON records and get a clean HTML table. Keys become columns, nested objects flatten to dot paths, and missing fields leave an empty cell instead of shifting a row. Copy the markup, download a page, or turn it into a link people can open and comment on, row by row.

data.json
411 B4 rows × 5 columns

Publishes the table to Comma: one URL instead of a pasted blob, private or open to anyone with the link, and readers comment on the exact row instead of quoting a key back at you in chat. Free, no card.

What the converter handles

  • Arrays of objects — the usual list response. Columns are the union of the keys, in the order they first appear, and a record missing one gets an empty cell.
  • Envelopes: {"data": [...]}, {"items": [...]}, {"results": [...]} — when exactly one property holds an array, that array is the table.
  • NDJSON / JSON Lines — one record per line, the shape log and bulk-export endpoints emit.
  • Nested objects flattened to owner.name dot paths, recursively. Arrays stay in one cell as compact JSON.
  • Cells are escaped, never parsed — a string value containing markup shows up as text in the table.
  • Markdown output too, if the destination is a README, a pull request or a ticket rather than a web page.

When the table should be a link

A JSON payload pasted into a chat thread is unreadable to everyone who did not write the query, and the feedback that comes back — “is APAC right?” — is detached from the row it is about. Published as a report, the table is one URL that renders identically for everyone, comments sit on the row they refer to, and re-publishing keeps the previous version as a revision. If the endpoint is queried on a schedule, a routine can post the new table to the same link. An agent can do the whole loop over the MCP server: fetch, render, publish.

Questions

How do I convert JSON to an HTML table?
Paste the JSON into the editor on this page, or drop a .json file onto it. An array of objects becomes a table whose columns are the keys, generated as you type — copy the markup, download a standalone page, or publish it as a shareable link. Nothing installs and nothing uploads.
What JSON shapes does it accept?
An array of objects (the usual API list response), an array of arrays (already tabular — the first row is used as the header), an array of plain values (one column), and a single object (one row). A response wrapped in an envelope such as {"data": [...]} or {"results": [...]} is unwrapped automatically when exactly one property holds an array.
Does it handle JSON Lines / NDJSON?
Yes. If the whole input does not parse as one JSON document but every line parses on its own, it is read as NDJSON — one record per line, which is what most log endpoints and bulk exports emit.
What happens to nested objects?
With “Flatten nested” on, {"owner": {"name": "Dana"}} becomes an owner.name column, recursively, so deep payloads still come out as a flat grid. With it off, the nested value is kept in one cell as compact JSON. Arrays are always kept as JSON in a single cell — a list inside a row has no column of its own.
Do the columns stay in a predictable order?
Yes. Columns appear in the order their keys are first seen, scanning the records top to bottom, and a record missing a key gets an empty cell rather than a shifted row.
Is my data uploaded anywhere?
No. Parsing happens in your browser and the preview renders in a sandboxed iframe on this page. The data only leaves your machine if you click “Get a shareable link” and create a report.
Can I get Markdown instead of HTML?
Yes — the Markdown tab emits a GitHub-flavored pipe table, which is what you want when the destination is a README, a pull request or a ticket rather than a web page.

Related: CSV to HTML table · HTML table to CSV · HTML viewer · all free tools · report types