Best JSON Compression Tool
Up to 97.3% smaller than LZMA. 150 wins, 0 losses across real-world JSON files. Lossless, verified, free to try.
How PZIP Compresses JSON
PZIP extracts a key dictionary from your JSON, storing repeated keys once. For arrays of objects, values are reorganized column-wise. The restructured data is then compressed with Brotli — beating standalone Brotli because the input is cleaner and more repetitive.
Codec: Key dictionary + BrotliHistory of JSON
JSON (JavaScript Object Notation) was popularized by Douglas Crockford in 2001 as a lightweight data interchange format. Standardized as ECMA-404 and RFC 8259, JSON became the dominant format for web APIs, configuration files, and NoSQL databases.
Compression Timeline
Douglas Crockford introduces JSON
RFC 4627 — first JSON specification
ECMA-404 standardizes JSON
RFC 8259 — latest JSON standard
PZIP beats LZMA on JSON with schema-aware compression
Real-World Benchmark Results
Every file tested with LZMA-9 (maximum compression) as baseline. Round-trip correctness verified on every file.
| File | Size | PZIP vs LZMA | Result | Download |
|---|---|---|---|---|
| npm_mocha.json | 3.8 MB | -97.3% | WIN | Source |
| ghcontrib_expressjs_express.json | 94.2 KB | -95.3% | WIN | Source |
| ghcontrib_pallets_flask.json | 93.7 KB | -95.3% | WIN | Source |
| ghcontrib_facebook_react.json | 93.3 KB | -95.2% | WIN | Source |
| ghcontrib_golang_go.json | 93.0 KB | -95.2% | WIN | Source |
| ghcontrib_vuejs_vue.json | 93.2 KB | -95.2% | WIN | Source |
| ghcontrib_apache_kafka.json | 94.1 KB | -95.1% | WIN | Source |
| ghcontrib_denoland_deno.json | 93.4 KB | -95.1% | WIN | Source |
| ghcontrib_docker_compose.json | 94.2 KB | -95.1% | WIN | Source |
| ghcontrib_elastic_elasticsearch.json | 94.2 KB | -95.1% | WIN | Source |
| ghcontrib_grafana_grafana.json | 95.4 KB | -95.1% | WIN | Source |
| ghcontrib_kubernetes_kubernetes.json | 93.5 KB | -95.1% | WIN | Source |
| ghcontrib_microsoft_TypeScript.json | 94.4 KB | -95.1% | WIN | Source |
| ghcontrib_nodejs_node.json | 93.9 KB | -95.1% | WIN | Source |
| ghcontrib_prometheus_prometheus.json | 94.6 KB | -95.1% | WIN | Source |
| ghcontrib_rust-lang_rust.json | 93.5 KB | -95.1% | WIN | Source |
| ghcontrib_vercel_next.js.json | 94.1 KB | -95.1% | WIN | Source |
| ghcontrib_microsoft_vscode.json | 94.2 KB | -95% | WIN | Source |
| ghissues_elastic_elasticsearch.json | 505.9 KB | -94.6% | WIN | Source |
| ghissues_vuejs_vue.json | 406.9 KB | -94.6% | WIN | Source |
| ghissues_kubernetes_kubernetes.json | 853.8 KB | -94.4% | WIN | Source |
| ghissues_django_django.json | 455.9 KB | -94.1% | WIN | Source |
| ghissues_torvalds_linux.json | 349.5 KB | -93.9% | WIN | Source |
| npm_next.json | 27.6 MB | -93.8% | WIN | Source |
| ghissues_grafana_grafana.json | 569.1 KB | -93.7% | WIN | Source |
| ghissues_python_cpython.json | 454.6 KB | -93.7% | WIN | Source |
| countries-data.json | 1.3 MB | -93.3% | WIN | Source |
| npm_sequelize.json | 4.1 MB | -93.3% | WIN | Source |
| ghissues_prometheus_prometheus.json | 524.5 KB | -92.7% | WIN | Source |
| ghissues_apache_kafka.json | 399.6 KB | -92.6% | WIN | Source |
| npm_webpack.json | 4.7 MB | -92.5% | WIN | Source |
| ghissues_microsoft_vscode.json | 704.8 KB | -92.3% | WIN | Source |
| ghissues_pallets_flask.json | 458.1 KB | -92.2% | WIN | Source |
| npm_gatsby.json | 22.5 MB | -92.1% | WIN | Source |
| npm_rollup.json | 5.8 MB | -92% | WIN | Source |
| ghissues_vercel_next.js.json | 422.4 KB | -91.7% | WIN | Source |
| npm_redux.json | 540.9 KB | -91.7% | WIN | Source |
| ghissues_denoland_deno.json | 387.3 KB | -91.5% | WIN | Source |
| ghissues_docker_compose.json | 544.6 KB | -91.1% | WIN | Source |
| npm_rxjs.json | 957.1 KB | -91% | WIN | Source |
| npm_eslint.json | 1.8 MB | -90.6% | WIN | Source |
| npm_knex.json | 1.3 MB | -90.5% | WIN | Source |
| npm_nx.json | 10.0 MB | -90.4% | WIN | Source |
| ghissues_facebook_react.json | 509.1 KB | -90.3% | WIN | Source |
| ghissues_golang_go.json | 592.7 KB | -90.2% | WIN | Source |
| ghissues_nodejs_node.json | 659.3 KB | -90.1% | WIN | Source |
| schemaorg-current.json | 1.5 MB | -90.1% | WIN | Source |
| ghissues_microsoft_TypeScript.json | 616.0 KB | -90% | WIN | Source |
| npm_axios.json | 733.9 KB | -89.8% | WIN | Source |
| npm_nuxt.json | 1.5 MB | -89.8% | WIN | Source |
| npm_express.json | 782.4 KB | -89.7% | WIN | Source |
| npm_pm2.json | 1.0 MB | -89.7% | WIN | Source |
| lockfile_microsoft_TypeScript.json | 376.9 KB | -89.2% | WIN | Source |
| npm_typescript.json | 14.5 MB | -88.8% | WIN | Source |
| npm_mysql2.json | 627.4 KB | -88.5% | WIN | Source |
| npm_webpack-dev-server.json | 826.7 KB | -88.1% | WIN | Source |
| npm_vue.json | 1.9 MB | -87.9% | WIN | Source |
| npm_mobx.json | 1007.1 KB | -87.1% | WIN | Source |
| npm_prettier.json | 638.4 KB | -86.9% | WIN | Source |
| npm_cypress.json | 1.0 MB | -86.7% | WIN | Source |
| npm_moment.json | 235.9 KB | -86.4% | WIN | Source |
| npm_ts-node.json | 561.1 KB | -86.3% | WIN | Source |
| npm_d3.json | 715.7 KB | -86% | WIN | Source |
| npm_three.json | 888.7 KB | -86% | WIN | Source |
| pypi_sqlalchemy.json | 3.9 MB | -85.9% | WIN | Source |
| npm_puppeteer.json | 3.8 MB | -85.8% | WIN | Source |
| pypi_aiohttp.json | 7.3 MB | -85.7% | WIN | Source |
| npm_sass-loader.json | 413.5 KB | -85.5% | WIN | Source |
| pypi_matplotlib.json | 1.9 MB | -85.4% | WIN | Source |
| pypi_numpy.json | 2.7 MB | -85.4% | WIN | Source |
| pypi_pillow.json | 2.6 MB | -85.4% | WIN | Source |
| npm_babel-loader.json | 245.3 KB | -85.3% | WIN | Source |
| pypi_mypy.json | 1.3 MB | -85.2% | WIN | Source |
| pypi_scikit_learn.json | 1.1 MB | -85.2% | WIN | Source |
| npm_bcrypt.json | 200.6 KB | -85.1% | WIN | Source |
| npm_webpack-cli.json | 521.9 KB | -85.1% | WIN | Source |
| pypi_tensorflow.json | 1.3 MB | -85.1% | WIN | Source |
| pypi_scipy.json | 1.8 MB | -85% | WIN | Source |
| npm_body-parser.json | 211.7 KB | -84.9% | WIN | Source |
| npm_inquirer.json | 576.6 KB | -84.9% | WIN | Source |
| pypi_pandas.json | 1.7 MB | -84.9% | WIN | Source |
| npm_serve-static.json | 146.9 KB | -84.8% | WIN | Source |
| pypi_tornado.json | 371.3 KB | -84.8% | WIN | Source |
| npm_ts-loader.json | 600.5 KB | -84.7% | WIN | Source |
| npm_css-loader.json | 504.2 KB | -84.5% | WIN | Source |
| npm_uuid.json | 219.3 KB | -84.4% | WIN | Source |
| pypi_boto3.json | 2.7 MB | -84.4% | WIN | Source |
| npm_nodemon.json | 636.9 KB | -84.3% | WIN | Source |
| npm_html-webpack-plugin.json | 481.9 KB | -84.2% | WIN | Source |
| npm_yargs.json | 725.6 KB | -84.2% | WIN | Source |
| npm_compression.json | 96.2 KB | -83.8% | WIN | Source |
| npm_express-validator.json | 302.4 KB | -83.8% | WIN | Source |
| npm_jsonwebtoken.json | 179.4 KB | -83.7% | WIN | Source |
| npm_jimp.json | 1.1 MB | -83.6% | WIN | Source |
| npm_mini-css-extract-plugin.json | 387.3 KB | -83.6% | WIN | Source |
| npm_lodash.json | 238.5 KB | -83.5% | WIN | Source |
| npm_listr2.json | 1020.9 KB | -83.4% | WIN | Source |
| npm_postcss-loader.json | 271.8 KB | -83.4% | WIN | Source |
| pypi_django.json | 536.0 KB | -83.4% | WIN | Source |
| pypi_black.json | 676.7 KB | -83.3% | WIN | Source |
| pypi_pytest.json | 252.6 KB | -83.3% | WIN | Source |
| pypi_sphinx.json | 390.8 KB | -83.3% | WIN | Source |
| npm_lerna.json | 862.8 KB | -83.1% | WIN | Source |
| npm_nodemailer.json | 549.9 KB | -83.1% | WIN | Source |
| pypi_fastapi.json | 408.3 KB | -83.1% | WIN | Source |
| pypi_requests.json | 168.8 KB | -83% | WIN | Source |
| npm_bull.json | 602.0 KB | -82.9% | WIN | Source |
| npm_file-loader.json | 155.6 KB | -82.9% | WIN | Source |
| npm_socket.io.json | 370.3 KB | -82.9% | WIN | Source |
| pypi_plotly.json | 311.0 KB | -82.9% | WIN | Source |
| pypi_isort.json | 216.3 KB | -82.8% | WIN | Source |
| pypi_uvicorn.json | 186.9 KB | -82.8% | WIN | Source |
| npm_leaflet.json | 143.2 KB | -82.7% | WIN | Source |
| pypi_httpx.json | 104.7 KB | -82.4% | WIN | Source |
| npm_terser-webpack-plugin.json | 377.6 KB | -82.3% | WIN | Source |
| pypi_celery.json | 270.7 KB | -82.3% | WIN | Source |
| npm_pg.json | 459.7 KB | -82.2% | WIN | Source |
| npm_style-loader.json | 209.1 KB | -82.2% | WIN | Source |
| pypi_flask.json | 79.5 KB | -82.2% | WIN | Source |
| pypi_gunicorn.json | 97.8 KB | -82.2% | WIN | Source |
| npm_react.json | 6.2 MB | -82% | WIN | Source |
| npm_cors.json | 76.1 KB | -81.7% | WIN | Source |
| npm_multer.json | 142.4 KB | -81.3% | WIN | Source |
| pypi_seaborn.json | 47.9 KB | -81.2% | WIN | Source |
| npm_rimraf.json | 204.0 KB | -81.1% | WIN | Source |
| npm_morgan.json | 74.6 KB | -80.9% | WIN | Source |
| npm_debug.json | 191.2 KB | -80.6% | WIN | Source |
| npm_turbo.json | 1.6 MB | -80.6% | WIN | Source |
| npm_helmet.json | 333.5 KB | -80.3% | WIN | Source |
| geojson_countries.json | 14.0 MB | -80.2% | WIN | Source |
| npm_parcel.json | 2.6 MB | -80.2% | WIN | Source |
| npm_concurrently.json | 198.8 KB | -80% | WIN | Source |
| npm_url-loader.json | 95.9 KB | -80% | WIN | Source |
| npm_playwright.json | 15.0 MB | -79.9% | WIN | Source |
| npm_jest.json | 833.6 KB | -79.8% | WIN | Source |
| npm_dotenv.json | 257.3 KB | -78.7% | WIN | Source |
| npm_passport.json | 73.8 KB | -78.5% | WIN | Source |
| npm_electron.json | 3.6 MB | -78.4% | WIN | Source |
| npm_commander.json | 340.3 KB | -78.3% | WIN | Source |
| npm_chalk.json | 115.1 KB | -78.1% | WIN | Source |
| npm_minimatch.json | 299.1 KB | -78.1% | WIN | Source |
| npm_cookie-parser.json | 43.7 KB | -77.8% | WIN | Source |
| npm_chalk-animation.json | 40.1 KB | -77.7% | WIN | Source |
| npm_mkdirp.json | 113.7 KB | -77% | WIN | Source |
| npm_boxen.json | 94.0 KB | -76.8% | WIN | Source |
| npm_minimist.json | 75.3 KB | -76.5% | WIN | Source |
| npm_dotenv-cli.json | 74.5 KB | -76.1% | WIN | Source |
| npm_ora.json | 139.0 KB | -75.9% | WIN | Source |
| npm_esbuild.json | 1.2 MB | -74.5% | WIN | Source |
| npm_terminal-link.json | 26.1 KB | -69.4% | WIN | Source |
Frequently Asked Questions
How much smaller does PZIP make JSON files?
+
PZIP achieves up to 22% savings vs LZMA-9 on JSON files. Key dictionary extraction + Brotli beats both LZMA and standalone Brotli across all 150 tested files.
Is PZIP good for compressing API responses?
+
Yes — JSON API responses with repeated key names benefit from key dictionary extraction. The more repetitive the schema, the bigger the savings.
PZIP vs Other Compressors for JSON
| Feature | PZIP | LZMA / xz | gzip | zstd |
|---|---|---|---|---|
| Type-Aware | Yes | No | No | No |
| Lossless | Yes | Yes | Yes | Yes |
| Never-Worse Guarantee | Yes | N/A | N/A | N/A |
| Best JSON Saving | 97.3% | Baseline | Worse | ~Similar |
| Round-Trip Verified | Every file | Manual | Manual | Manual |
Try PZIP on Your JSON Files
Upload any JSON file up to 30 MB. Free during beta — no signup required. See how much smaller PZIP makes it.
Baseline: LZMA-9 (maximum compression)
Competitors: gzip-9, bz2-9, brotli-11, zstd-19, PPMd 2-24
Verification: Byte-exact round-trip on every file
Guarantee: Never-worse (PZIP <= LZMA, always)
Test files: 150 real-world JSON files
Updated: 2026-02-15