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.
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.namedot 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