JSON Table Viewer

Paste JSON and see its records as rows and columns. Pick the array to show, flatten nested objects, sort and filter, then export exactly what you see.

JSON

Table

Columns
Visible columns

Paste a JSON array of objects to see it as a table.

From records to rows

Most JSON that people want to read as a table is an array of objects: API results, database exports, analytics events. Each object becomes a row and each key a column, in the order keys first appear. Rows that lack a key leave that cell empty, and a JSON null is shown in italics as null, so missing and null values stay distinguishable.

If the document holds several arrays, for example users and teams in one response, the Array menu lists each of them by its JSONPath with its item count, arrays of objects first. The tool picks the largest array of objects to begin with. Arrays nested inside rows are not offered as separate tables; they appear as compact JSON in their cell, such as ["book","pen"].

Flattening nested objects

With Flatten nested objects on, an object inside a row becomes one column per leaf in dot notation: customer.name, customer.address.city. This is usually what you want for spreadsheets and quick comparisons. Turn it off to keep each nested object in a single cell as compact JSON, which keeps wide records readable.

When a key already contains a dot and collides with a flattened path (a key named a.b next to an object a with a key b), both columns are kept and the second is labelled a.b (2), so values are never merged. Numbers keep their exact digits in every cell, including 64-bit IDs that JavaScript would round.

Sorting, filtering and choosing columns

  • Click a column header to sort ascending, again for descending, and a third time to restore the original order. Numbers sort as numbers, and text sorts naturally, so item2 comes before item10. The sort is stable, so rows that tie keep their relative order, which lets you sort by one column and then another. Empty and null cells always go last.
  • Filter rows keeps rows containing the text, ignoring case, in any visible column or in the one column you pick from the in menu.
  • Columns lists every column with a checkbox; hide the ones you do not need, or use Show all to bring them back.

The line under the toolbar always says how many rows and columns are showing out of the total, and the # column gives each row’s position in the source array, so you can find it again after sorting.

Exporting what you see

The exports follow the table on screen: visible columns in their order, filtered rows in their sorted order.

  • CSV is UTF-8 with a byte-order mark, so Excel opens accented names correctly. Fields with commas, quotes or line breaks are quoted.
  • Excel produces a real .xlsx file with a bold, frozen header row. Numbers are stored as numbers, except ones a spreadsheet cannot hold exactly, which are kept as text rather than silently rounded.
  • Copy as Markdown puts a GitHub-flavoured table on the clipboard for issues, pull requests and docs, with pipes escaped.

For conversions with more options, such as a different delimiter, use JSON to CSV. To browse deeply nested data rather than flat records, the JSON Viewer shows the full tree.

Large tables, kept private

Parsing and exports run in a background worker, and only the rows in view are drawn, so tables with tens of thousands of rows scroll smoothly. Up to 100,000 rows are loaded; beyond that the page tells you how many rows exist and that filtering, sorting and exports cover the loaded ones. Your data never leaves the browser. If the JSON does not parse, try JSON Repair.

Examples

Orders with a nested customer

Flattening turns the customer object into customer.name and customer.address.city columns; the items array stays as compact JSON. This is the table copied as Markdown.

JSON
[
  { "id": "A-1001", "total": 42.5, "status": "shipped", "customer": { "name": "Ada", "address": { "city": "London" } }, "items": ["book", "pen"] },
  { "id": "A-1002", "total": 189, "status": "pending", "customer": { "name": "Linus", "address": { "city": "Helsinki" } }, "items": ["laptop"] },
  { "id": "A-1003", "total": 7.25, "status": "shipped", "customer": { "name": "Grace", "address": { "city": "New York" } }, "items": [] }
]
Result
| id | total | status | customer.name | customer.address.city | items |
| --- | --- | --- | --- | --- | --- |
| A-1001 | 42.5 | shipped | Ada | London | ["book","pen"] |
| A-1002 | 189 | pending | Linus | Helsinki | ["laptop"] |
| A-1003 | 7.25 | shipped | Grace | New York | [] |
Load this example into the tool

A response with two arrays

The users array is shown first because it is the largest; switch the Array menu to $.teams to see the other table.

JSON
{
  "generatedAt": "2026-10-01T08:00:00Z",
  "teams": [
    { "id": "t1", "name": "Platform", "lead": "u2" },
    { "id": "t2", "name": "Payments", "lead": "u3" }
  ],
  "users": [
    { "id": "u1", "name": "Ada", "team": "t1", "age": 36 },
    { "id": "u2", "name": "Linus", "team": "t1", "age": 54 },
    { "id": "u3", "name": "Grace", "team": "t2", "age": 85 },
    { "id": "u4", "name": "Margaret", "team": "t2", "age": 9 }
  ]
}
Load this example into the tool

Ragged rows and natural sorting

Sort by sku to get item1, item2, item10, item20; sort by stock to see null and missing values go last in either direction.

JSON
[
  { "sku": "item10", "price": "19.90", "stock": 4 },
  { "sku": "item2", "price": "5", "stock": null, "discontinued": true },
  { "sku": "item1", "stock": 120 },
  { "sku": "item20", "price": "1200", "stock": 0 }
]
Load this example into the tool

Common errors and how to fix them

ErrorCauseFix
All columns are hiddenEvery checkbox in the Columns menu was cleared, so there is nothing to draw or export.Open Columns and choose Show all, or tick the columns you need.
Only the first 100,000 of 250,000 rows are loadedThe array is larger than the table keeps in the browser at once.Filter or split the data first, or use JSON to CSV, which converts every row.
Unexpected end of input: 2 brackets are still open — '{' opened at line 1
Explained
The export or API response was cut off before the end, so the array never closes.Fetch or copy the data again; to salvage the rows that did arrive, run it through JSON Repair first.

Frequently asked questions

What JSON shapes can be shown as a table?

Arrays of objects work best. Arrays of arrays get numbered columns, arrays of plain values get a single (value) column, and a single object is shown as a one-row table.

Why are some cells empty and others say null?

An empty cell means the row has no such key; null means the key is present with the value null. Both sort last, and both are empty in CSV.

Do exports include hidden columns or filtered-out rows?

No. CSV, Excel and Markdown exports contain exactly the visible columns and the rows that pass the filter, in the current sort order.

Will Excel round my large numbers?

Excel stores numbers as doubles, so values that cannot be held exactly, such as 20-digit IDs, are written as text to keep every digit. Ordinary numbers stay numeric for formulas.

Is the data uploaded anywhere?

No. Everything runs in your browser, and downloads are created locally.

Related tools