Turn JSON records into a clean markdown table
Pasting structured data into a README, GitHub issue, or chat message means hand-building a markdown table, which is tedious and error-prone. This converter takes a JSON array of objects and produces a properly formatted table in one step, detecting columns automatically and escaping anything that would break the layout.
How it works
The tool parses your input as a JSON array and walks every object to build the union of all keys — that becomes the column set, so records with different shapes still produce a rectangular table. Each cell value is stringified (numbers and booleans directly, nested objects as compact JSON), and pipes are escaped while newlines are collapsed to spaces so the markdown stays valid. You can choose left, center, or right alignment, which sets the separator row, and untick any columns you want to omit.
A complete worked example
Input:
[
{ "name": "Alice", "role": "Admin", "active": true },
{ "name": "Bob", "role": "Editor", "active": false },
{ "name": "Carol", "role": "Viewer", "active": true }
]
Output (left-aligned):
| name | role | active |
| ----- | ------ | ------ |
| Alice | Admin | true |
| Bob | Editor | false |
| Carol | Viewer | true |
Which renders as:
| name | role | active |
|---|---|---|
| Alice | Admin | true |
| Bob | Editor | false |
| Carol | Viewer | true |
Alignment options explained
The separator row (the dashes between the header and data) controls alignment in Markdown:
| Separator style | Alignment | Use for |
|---|---|---|
--- | Left (default) | Text, names, categories |
:---: | Center | Status flags, short labels |
---: | Right | Numbers, prices, counts |
Right-aligning numeric columns makes figures line up at the decimal point, which is much easier to scan than left-aligned numbers.
Tips and notes
For the cleanest output, flatten nested objects before pasting — deeply nested values still render but as inline JSON, which is harder to read. Everything runs locally in your browser with no network calls, so it is safe for sensitive data. Use the column selector to trim wide datasets down to just the fields you want to show, and switch alignment to right for numeric columns so figures line up neatly.
If a value contains a pipe character |, the converter escapes it as \| so it does not break the table structure. Newlines inside cell values are collapsed to spaces for the same reason.