One canonical shape
Cells come out with the same keys everywhere: cell_type, source as a single string, execution_count and outputs. nbformat 3 worksheets and nbformat 4 notebooks land in the same structure.
IPYNB to JSON
Drop in an .ipynb file and download a normalised .json document: one canonical cell shape, a summary at the top, outputs as plain data and base64 images optionally stripped — ready for jq, scripts and pipelines.
Converted in your browser — the notebook is never uploaded. You can also drop it anywhere on this page.
That file could not be opened
notebook.ipynb
JSON preview (first 200 lines)
The file is assembled in this tab from the notebook you chose. Nothing is uploaded, and the download is yours alone — the same document every time for the same notebook.
Convert to LaTeX instead1 canonical shape
Every cell normalised to the same fields, whatever wrote the notebook.
0 bytes uploaded
Parsing and serialization happen on your device.
jq ready
A real JSON document — valid, pretty-printed, no cleanup.
6 notebook sources
Jupyter, JupyterLab, Colab, VS Code, Kaggle, Deepnote.
What the file keeps
The converter parses the notebook format and writes one canonical document — every consumer reads the same keys, whatever saved the file.
Cells come out with the same keys everywhere: cell_type, source as a single string, execution_count and outputs. nbformat 3 worksheets and nbformat 4 notebooks land in the same structure.
total_cells, counts per type, outputs, cells_with_image_outputs and code_lines — so a script can answer what a notebook contains without walking the cells array.
Stream text, results and tracebacks stay structured, and ANSI escape codes are stripped — the JSON is clean to diff, search and compare.
Base64 payloads dwarf everything else a notebook stores. Strip them and their mime types are listed under stripped_mimes instead of vanishing silently.
The same notebook always serialises to the same document: two-space indentation, fixed key order, one trailing newline — safe to commit and diff.
Feed the file to jq, a Python script or a CI check. It is one JSON document that JSON.parse accepts: no comments, no trailing commas, no surprises.
Compatibility
Notebooks from Jupyter Notebook, JupyterLab, Google Colab, Kaggle, Deepnote and VS Code all convert, including the older nbformat 3 files.
Notebook formats
Cell types
Output types
Known limits
How it works
Drop in an .ipynb file and download a normalised .json document: one canonical cell shape, a summary at the top, outputs as plain data and base64 images optionally stripped — ready for jq, scripts and pipelines.
Drop the notebook in
Choose an .ipynb file or drag it onto the page; it is parsed on your device and serialized immediately.
Check the document
The preview shows the start of the JSON — the summary first, then the cells array in notebook order.
Download the .json file
Save notebook.json and open it with jq, an editor or a script; the document is valid JSON with no cleanup needed.
From the browser converter above to jq and the command line — pick the route that fits where you already are.
jupyter nbconvert --to json notebook.ipynb writes the raw notebook back out under a .json name: same structure, same base64 payloads, no normalisation and no summary. This page normalises and summarises, in the browser, with no install.
JupyterLab and classic Notebook offer File → Download As → Notebook (.ipynb) — JSON, but unnormalised and still carrying every base64 figure. This converter writes the clean version.
jq '.summary' notebook.json prints the cell counts and language without walking the cells array — the summary exists so scripts and pipelines can read a notebook without understanding nbformat at all.
In a hurry? Use the converter at the top.
The browser converter above reads the same notebooks as every route on this page and produces the same normalised .json document — with nothing installed and nothing uploaded.
FAQ
Short answers about turning a notebook into JSON — why normalise a file that already is JSON, what the summary carries, and how to read the result with jq.
Use the converter at the top of this page: choose or drop in your .ipynb file and the browser writes a normalised JSON document — summary first, then every cell in notebook order. Download the .json file. No upload, no install, no terminal.
Because the raw file is not a document you can rely on. Cell sources are sometimes strings, sometimes arrays of lines; outputs mix mime bundles with base64 payloads; metadata differs between tools. This converter pins one shape for all of it and adds a summary, so a script written once keeps working.
With jq '.summary' notebook.json you get the cell counts, language and output totals in one line; jq '.cells[] | select(.cell_type=="code")' walks only the code. The summary object exists exactly so these one-liners do not need to understand nbformat.
total_cells, code_cells, markdown_cells, raw_cells, outputs, cells_with_image_outputs and code_lines — plus the language, kernel and nbformat at the top level of the document. Everything needed to decide whether a notebook is worth parsing further.
Yes. Base64 plots and figures are usually 90% of a notebook's bytes. With image stripping on, each payload is replaced by its mime type listed in stripped_mimes, so you can see exactly what was left out instead of losing it silently.
Yes — outputs and execution_count are kept per code cell by default. Stream text, results and tracebacks all carry over, with ANSI colours removed so the text is clean inside a JSON string.
Run jupyter nbconvert --to json notebook.ipynb. It writes the notebook back out as-is: the same structure, the same base64 payloads, no normalisation and no summary. Use it when you need the untouched file; use this page when you need a clean document.
Images attached to markdown cells are rewritten as data URLs in the JSON, so the document stays self-contained — one file with no sidecar images — and a renderer reading the JSON can still resolve them.
Yes. The same notebook serialises to the same bytes in a fixed key order, so diffs show real changes only. Combined with stripped images, it is the compact, diffable form of a notebook for repository review.
Yes. The file is read with the browser File API and serialized inside the tab, so after the page loads you can disconnect the network and the conversion still works — which is also the practical proof that nothing was uploaded.
No. The file is parsed as JSON and re-serialized inside the tab. No server is involved at any step, and closing the tab leaves nothing behind.
Yes, with no account, no file-size gate and no watermark. The conversion runs on your own device, so there is no per-file cost — same as the site's IPYNB to PDF, PY, HTML, Markdown, LaTeX and DOCX converters.
Drop it in, download the .json, and let a script answer questions about the session instead of reading it by hand.
Convert a notebook to JSON