To open a large JSON file without crashing the browser, extract a small slice with jq and open that file instead. Firefox can display a modest JSON file as a collapsed tree. Pasting the full dump into an online formatter or dragging it onto Chrome can still freeze the tab.
An export lands on the desktop: a store dump, an API “Download JSON,” or last quarter’s backup. You double-click because the icon looks like a document. Chrome goes grey and Task Manager shows one tab eating RAM. You still have not seen whether an orders array even exists.
The tab holds the entire text, parses it, and tries to draw a tree. MDN, Mozilla, and the jq manual each describe part of that process. A browser tab is a poor viewer for a warehouse-sized export.
Why does Chrome freeze when I drop a big JSON file on a tab?
Chrome can freeze while the tab holds the file as one string, runs JSON.parse, and draws a tree. Parsing does not pause after the first thousand keys. A pretty viewer adds DOM nodes, so a file that looks manageable on disk can lock the tab.
MDN states the parse step in one sentence: “The JSON.parse() static method parses a JSON string, constructing the JavaScript value or object described by the string.”
An orders export might start with [ and end with ]. Drag it onto Chrome and the tab takes in every byte. JSON.parse walks the text before a built-in viewer or extension can make clickable rows. A file of tens of megabytes on disk can occupy more RAM as its keys become tracked objects. The multiplier has not been measured here; blog figures of “2x” or “8x” remain unverified.
While parse and layout run, clicks do nothing. That is the frozen tab, even before the sad-face crash page. Chrome’s Task Manager (Shift+Esc on Windows, or Window > Task Manager) can kill that renderer and leave mail open. It does not open the file.
Pretty-print usually makes this worse. Expanding a minified one-line dump multiplies characters. A collapsed tree is cheaper than a fully expanded document, but it still starts from a full parse unless the tool streams. Chrome’s ordinary File > Open path is not a streaming database.
How big can a JSON file be before a browser cannot even hold the text?
JavaScript engines impose string-length ceilings below the language specification’s limit. MDN’s String.length page lists the engine caps. They concern the raw text, before the browser builds a JSON tree.
| Engine | Maximum JS string length (MDN) |
|---|---|
| V8 in Chrome and Node, 64-bit | 2^29 – 24, about 1 GiB |
| V8 on 32-bit | 2^28 – 16, about 512 MiB |
| Firefox | 2^30 – 2, about 2 GiB |
| Safari | 2^31 – 1, about 4 GiB |
MDN notes that the language spec allows a much larger theoretical string, then says implementations lower the threshold so the length fits in a 32-bit integer. The GiB figures assume UTF-16 storage. Real memory can be smaller for Latin-1 text. The table is still not a promise that a 900 MB JSON file will open in Chrome. Parse and DOM sit on top of the string. A file well under 1 GiB can kill the tab.
There is no measured “Chrome JSON viewer dies at N megabytes” threshold here. SEO pages cite 10 MB, 25 MB, 50 MB, and 100 MB as though they were Chromium specs, but those figures do not appear in the MDN pages cited here. The crash point remains unverified and depends on nesting, line length, other tabs, and available RAM.
If Finder or Explorer already shows tens of megabytes, skip the tab. A few hundred kilobytes of config is fine in a browser. A few megabytes of pretty API response sometimes works and sometimes hangs. When it hangs, stop retrying the same click.
Minified files add a second trap. One enormous line gives editors almost nothing to grab. The same bytes pretty-printed across thousands of lines can feel lighter in a text editor, even though the file grew. That is an editor quirk. It is not proof that pretty-print is free inside Chrome.
Can Firefox open JSON without painting every brace on screen?
Yes, for a file that still fits in the tab. Firefox shows arrays and objects collapsed, with + to expand, so the first paint is not every leaf. It still parses the document. A warehouse-sized dump can stall Firefox the same way it stalls Chrome.
Mozilla’s JSON viewer docs say: “Firefox includes a JSON viewer. If you open a JSON file in the browser, or view a remote URL with the Content-Type set to application/json, it is parsed and given syntax highlighting.”
File > Open, drop the file on a window, or hit a URL that serves application/json. There is a search box. You can switch to raw text and pretty-print. Network responses also show request and response headers. From the Web Console, $json.data is the parsed object. That helps when the file is a settings blob you already trust.
A collapsed tree avoids drawing every node expanded, but Firefox still parses the file. For a warehouse export, use jq to cut it down first.
Firefox also recognizes JSON Lines: .jsonl, plus types like application/jsonl and application/x-ndjson. Each non-blank line is its own value. A bad line shows as an error and does not poison the rest. Pretty-print is off for that format because each record is already one line.
Concatenating paginated API pages into one .json can produce an invalid document. Chrome may hang before showing the error. Firefox’s JSON Lines viewer helps only when each line holds one value; two arrays glued together still fail. Check the ends: [ … ] is one array, { … } is one object, and separate bare objects on separate lines are JSON Lines.
Skip a random “JSON super viewer” extension as the first fix. Extensions share the same memory budget. Some also send the file out. Firefox’s built-in viewer stays in the browser you already have.
How do I pull one object out of a huge JSON file with jq?
Install jq, then extract a slice to a new file instead of opening the original in a tab. Current builds on the project page are jq 1.8.2, dated 20 June 2026. It is a single binary. Open the small output, not the dump.
The jq homepage says: “jq is like sed for JSON data – you can use it to slice and filter and map and transform structured data with the same ease that sed, awk, grep and friends let you play with text.”
In a terminal where jq is on PATH, pretty-print a copy you can actually read:
jq '.' orders-export.json > orders-pretty.json
The jq 1.8 manual calls . the identity operator. Default output is pretty-printed. That command still reads the whole JSON value. If orders-export.json is one 800 MB array, this can be slow and hungry. It is still better than asking Chrome to draw it.
If the root is an array and you only needed the first record, the manual’s own example is:
jq '.[0]' orders-export.json
On the sample [{"name":"JSON", "good":true}, {"name":"XML", "good":false}], that prints the first object. jq '.[2:4]' takes a slice. Redirect a slice to first-order.json and open that.
Saturday, finance sends refunds.json. Someone asks whether refund 0 has a stripe_id. You do not need 40,000 refunds on screen. jq '.[0]' refunds.json shows the shape. jq '.[0:20]' refunds.json > sample.json is a file Firefox can swallow.
If the file is one JSON value, jq still parses that value unless you use streaming mode. The manual’s --stream flag exists for this: “This is useful for processing very large inputs.” It emits path and leaf arrays instead of the full tree. Do not pass --slurp on a giant file. --slurp reads the entire input stream into one array on purpose.
If the export is already JSON Lines, jq can process its separate values without keeping the whole stream in memory. Converting a large array to .jsonl can make record-by-record inspection easier. The jq download page lists binaries for Linux, Windows, and macOS.
Should I paste a 100 MB JSON file into an online formatter?
No. Paste and upload both fail for the same two reasons. The page still has to parse in your tab, and now a third-party server may have a copy of the file. Customer emails, tokens, and internal IDs live in these dumps more often than people remember.
The textarea is a trap. Browsers do not treat a 100 MB paste as “just text.” The field itself is a DOM node. The freeze can start before anyone clicks Format. File-upload widgets that read the whole File with readAsText end in the same place: one huge string in the tab. A site that claims “all processing is local” can still crash you. Local only means the bytes did not leave. It does not mean you have spare RAM.
No particular formatter’s upload cap or privacy policy was audited for this draft. If the data is sensitive, check the site’s policy and the Network panel before sending it to a web app. No named formatter is being recommended as “safe.”
Look at the file size first. If it is more than a small config, skip the browser. Run jq '.[0]' locally, write a tiny sample, then open the sample in Firefox if you still want a tree. jq 'keys' only makes sense when the root is an object. On an array, jq’s length filter answers how many records they sent.
If jq is not installed and you only needed the first 2 KB, more or less in a terminal shows the opening keys without parsing. That will not validate JSON. It will tell you whether you are looking at an array of orders or a wrapper like {"data":[...]}, which is enough to write the right filter later.
Frequently asked questions
Does pretty-printing a minified JSON file stop the crash?
No. Pretty-print expands the text. A one-line 30 MB file can become a much larger pretty file, and the parse still covers every token. Use pretty-print on a slice after jq has already cut the file down. Firefox can pretty-print a file it already opened. That helps you read a file that loaded. It does not rescue a file that killed Chrome.
What if the file is JSON Lines, not one JSON value?
Treat it as a stream of records. Firefox documents .jsonl and several JSON Lines content types, and it collapses each line independently. jq reads whitespace-separated values one at a time, which matches this format. JSON.parse on the whole file will throw, because two objects back to back are not one JSON document. If Chrome errors immediately, check the first few lines before you assume the export is corrupt.
Can I just open it in Notepad, TextEdit, or VS Code instead?
A text editor avoids the browser’s DOM tree, but it may still hitch on a huge minified line. Some editors also stop tokenizing very large files; their cutoffs were not retested for this piece and remain unverified. An editor can show the first bytes. To retrieve record 0, use jq.
Will Chrome Task Manager save the rest of my tabs if one JSON tab wedges?
Usually yes. Chrome isolates tabs into processes, so ending the stuck renderer often leaves mail and docs alone. That is damage control, not a viewer. After you kill the tab, do not open the same path again. Slice the file first. If the whole OS is swapping, isolation did not help enough, and you still want jq, not a second try.



