Open a large JSON file
How to open a large JSON file without crashing your editor
rows.page opens JSON and JSONL files of up to 1.5 GB in your browser as a table, loading 100 rows at a time as you scroll. It's free with no signup, nothing is uploaded, and nested objects become columns. For bigger files, stream them with jq or query them with DuckDB.
No file handy? Open Every country, as nested JSON (250 rows, 1.4 MB).
Why large JSON files freeze editors and viewers
A JSON document is one value, often a single top-level array, so many tools parse the whole file into memory before they show anything. Editors add syntax highlighting and folding on top, and browser viewers render every node, so a file of a few hundred megabytes can freeze them. JSON Hero, for example, stops at 1 MB.
JSON Lines (.jsonl, .ndjson, .ldjson) is easier on tools: every line is a separate JSON object, so readers can process it line by line. If you're stuck with one huge .json array, you need a tool that reads it as a table or streams it.
| Tool | Largest file it handles | Cost | View type |
|---|---|---|---|
| rows.page | 1.5 GB per browser tab; bigger JSONL loads the first rows | Free, no signup | Table with a row drawer |
| JSON Hero | 1 MB | Free, open source | Column, tree and editor views |
| Dadroit JSON Viewer | 50 MB free, 2 GB Standard, 1 TB Advanced | Free, Standard $98 per year | Desktop app |
| jq | No published limit with --stream | Free (MIT) | Terminal text |
| DuckDB | No published limit | Free | SQL results in the terminal |
| jless | No published limit | Free (MIT) | Terminal tree you expand and collapse |
How to open a JSON file up to 1.5 GB in rows.page
- Open
https://rows.pageand drop your.json,.jsonl,.ndjsonor.ldjsonfile on the page, choose it from your disk, or click Paste data to paste JSON text. - Scroll the grid. There is no row limit, and DuckDB-WASM reads the file inside your browser tab, so nothing is uploaded unless you click Share.
- Click any row to open it in a side drawer with a JSON/Fields toggle and a Copy as JSON button.
- Filter in the search box with terms like
country:NLorprice:>20, or type SQL that starts withSELECT,WITHorFROMagainst the tabledata. Put dot-path column names in double quotes, like"user.city".
Nested objects flatten into dot-path columns like user.address.city, up to 8 levels deep and 200 child fields per object. Arrays stay as list columns that show the first 6 items and "+N". A wrapper object like {"data": [...]} is unwrapped to its biggest list, with the note: Showing the N items in "data"; the other top-level fields were skipped.
A .json file over 1.5 GB is refused with "Too big for this browser". A JSONL or NDJSON file over 1.5 GB loads partially instead, with the note "Loaded the first N rows: the file is X, more than the browser can hold." rows.page has no whole-file tree view, and you can't edit cells.
How to open a JSON file over 1.5 GB
jq
Plain jq parses a whole top-level array before running your filter, which fails on multi-gigabyte files. With --stream, jq reads the input piece by piece, and this idiom writes each array item to its own line:
jq -cn --stream 'fromstream(1|truncate_stream(inputs))' big.json > big.jsonlThe result is JSONL, so you can split it with line-based tools. It also helps in rows.page: a JSONL file over 1.5 GB opens with its first rows, where the same data as one .json array is refused.
DuckDB
The DuckDB command-line tool reads JSON arrays and newline-delimited JSON from disk, detects the layout and infers column types. Look at the first 10 records:
SELECT * FROM read_json('big.json') LIMIT 10;To explore the whole file in rows.page, convert it to Parquet once. Nested data stays as STRUCT and LIST columns, and rows.page doesn't hold Parquet files to the 1.5 GB check.
COPY (SELECT * FROM read_json('big.json')) TO 'big.parquet' (FORMAT parquet, COMPRESSION zstd);Desktop and terminal viewers for big JSON files
Dadroit JSON Viewer
Dadroit is a desktop app for large JSON files. The free version opens files up to 50 MB, Standard costs $98 per year and opens files up to 2 GB, and Advanced goes up to 1 TB.
jless
jless is a free, MIT-licensed JSON viewer for the terminal on macOS and Linux. You expand and collapse objects and arrays and move around with vim-style keys instead of scrolling raw text.
rows.page limits and prices
| What | Limit or price |
|---|---|
| Open a file in your browser | Files up to 1.5 GB, $0, no account, nothing uploaded |
| Share a link without an account | $0, files up to 100 MB, link deleted 7 days after creation |
| Free account | $0, 10 datasets kept, last 3 versions |
| Pro | $12/month, 100 datasets, files up to 500 MB, private links |
| Max | $39/month, 1,000 datasets, files up to 2 GB, private links |
Questions
What is the largest JSON file rows.page can open?
A .json file can be up to 1.5 GB per browser tab; bigger ones are refused with "Too big for this browser". JSONL and NDJSON files over 1.5 GB load partially, showing the first rows that fit.
Does rows.page upload my JSON file?
No. DuckDB-WASM reads it inside your browser tab, and nothing is uploaded unless you click Share or push it with curl -T. A single push takes up to 100 MB on any plan; Pro ($12 per month) and Max ($39 per month) take files up to 500 MB and 2 GB through multipart uploads.
How do I convert a large JSON file to CSV or Parquet in rows.page?
Open the file, then pick CSV, Parquet (zstd), JSON, JSONL or Markdown (first 1,000 rows) in the Export menu. A filtered view exports every matching row and a SQL result up to 1,000,000 rows; in CSV, nested fields become dot-path columns and lists are written as JSON text.
How does rows.page handle deeply nested JSON?
Nested objects become dot-path columns such as user.address.city, up to 8 levels deep and 200 child fields per object, and arrays stay as list columns. Use unnest() in the SQL box to turn a list into rows, or click a row to see the full record in the side drawer.
Can I open a large JSON file from a URL?
Yes, put the link after https://rows.page/, such as a raw.githubusercontent.com link, a Hugging Face /resolve/ link or an S3 presigned URL. Your browser fetches it directly, or through the rows.page proxy (up to 100 MB, 30 seconds, 5 redirects) when the host blocks cross-origin requests, and nothing is stored.