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.

.json.jsonl
Drop a file here
Stays in your browserUp to 1.5 GB

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.

Large JSON viewers and tools by file size
ToolLargest file it handlesCostView type
rows.page1.5 GB per browser tab; bigger JSONL loads the first rowsFree, no signupTable with a row drawer
JSON Hero1 MBFree, open sourceColumn, tree and editor views
Dadroit JSON Viewer50 MB free, 2 GB Standard, 1 TB AdvancedFree, Standard $98 per yearDesktop app
jqNo published limit with --streamFree (MIT)Terminal text
DuckDBNo published limitFreeSQL results in the terminal
jlessNo published limitFree (MIT)Terminal tree you expand and collapse

How to open a JSON file up to 1.5 GB in rows.page

  1. Open https://rows.page and drop your .json, .jsonl, .ndjson or .ldjson file on the page, choose it from your disk, or click Paste data to paste JSON text.
  2. 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.
  3. Click any row to open it in a side drawer with a JSON/Fields toggle and a Copy as JSON button.
  4. Filter in the search box with terms like country:NL or price:>20, or type SQL that starts with SELECT, WITH or FROM against the table data. 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:

bash
jq -cn --stream 'fromstream(1|truncate_stream(inputs))' big.json > big.jsonl

The 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:

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

sql
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

WhatLimit or price
Open a file in your browserFiles 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.