Parquet to JSON Converter
Convert a Parquet file to a JSON array or JSON Lines in your browser. Nested lists and structs stay nested; decimals and large integers keep every digit. Nothing is uploaded.
Open a .parquet file to convert it to JSON, or try the sample file. You can also drop a file here.
Columns
How to convert Parquet to JSON
- Open the .parquet file, or click Try sample file. The tool opens on the Export tab with JSON array selected.
- Choose JSON array (one array of objects) or JSON Lines (one object per line — easier to stream and to load into BigQuery, Snowflake or
jq). - Choose the rows: the current page, the filtered results, or all rows.
- Click Export. Progress is shown per row group, and you can cancel.
JSON serialization choices
JSON has one number type, a 64-bit float, so some Parquet values cannot be JSON numbers without losing digits. This converter makes these choices and applies them to every row:
- INT64/UINT64 inside ±9,007,199,254,740,991: numbers. Outside that range: strings.
- DECIMAL: always strings, with the column's scale (
"0.10", not0.1). - TIMESTAMP and DATE: ISO 8601 strings at the stored precision.
- Binary: Base64 strings. NaN and ±Infinity: strings.
- NULL:
null. A struct field that is missing is left out of the object.
Step-by-step walkthrough: How to open and inspect a Parquet file without Python or Spark.
How values are shown and exported
- Large integers (INT64/UINT64) keep every digit. In JSON, integers inside ±9,007,199,254,740,991 are numbers; larger ones are strings, because JavaScript numbers cannot hold them exactly.
- Decimals are read from their stored integers and written as exact strings with the column's scale, for example
"12345678901234.5678"— in JSON too. - Timestamps keep full millisecond, microsecond or nanosecond precision as ISO 8601. A
Zis added only when the column is marked as adjusted to UTC; local (no-timezone) timestamps and legacy INT96 timestamps are shown without one and labelled. More in Parquet timestamps explained. - Null, empty and missing are shown differently:
null,"", and missing for a field absent from a struct. In CSV, nulls use the token you choose and empty strings are always written as"", so the two stay distinguishable. - Nested values (lists, structs, maps) stay nested in JSON. In CSV they are written as JSON text in one cell, or left out.
- Binary columns are written as Base64. NaN and Infinity are written as strings in JSON.
Does my Parquet file get uploaded?
No. The file is read in your browser with File.slice(), and decoding runs in a Web Worker on your device. File contents and filter values are not sent in any network request; our browser test suite checks every request made while a file is open. Clearing the file releases the reference to it and stops the worker.
Size limits for JSON exports
Exports are limited by browser memory. The JSON file is built in memory before it is saved, and JSON output is larger than the Parquet data it comes from.
- One export may cover up to 250 MB of decoded data. A 300 MB export froze the page for 2.4 seconds and a 400 MB export crashed the tab, so larger exports are refused; filter or pick fewer columns and export in parts.
- One read (a page, or one row group during a filter or export) may decode up to 400 MB. In testing, a single 400 MB row group opened and filtered; larger reads are refused with a message.
- In the test, all 5,000,000 rows of a 55 MB file (204 MB decoded) exported to a 486 MB JSON Lines file in 10.0 seconds.
These figures come from one machine and one browser: Apple M4 (Mac16,3, 16 GB RAM), Chromium 145.0.7632.6 (headless), measured on 2026-10-02. They are not a guarantee for your device. The 400 MB and 250 MB guards are fixed, so on a computer or phone with less memory, in another browser, or with many tabs open, a file inside the guards can still run out of memory and close the tab. If that happens, select fewer columns or use DuckDB.
Full measurements for every test file: Parquet Viewer — limits measured for this tool.
Frequently asked questions
What is the difference between JSON array and JSON Lines?
A JSON array wraps every row in one array. JSON Lines (NDJSON) writes one JSON object per line, which tools can read line by line without loading the whole file.
Why are some numbers strings in the JSON?
Decimals, and integers beyond ±9,007,199,254,740,991, are written as strings so no digits are lost. JavaScript and many JSON parsers would round them as numbers.
Are nested Parquet columns kept?
Yes. Lists become arrays, structs and maps become objects, at any depth.
How are timestamps written?
As ISO 8601 strings at the stored precision, with Z only when the column is adjusted to UTC. Local timestamps have no offset.
Is the file uploaded to convert it?
No. The conversion runs in your browser and the JSON file is created on your device.