dataeng.tools

Convert Avro to JSON — Free, Private, In-Browser

Avro is a row-oriented binary format that carries its schema in the file header — the format that shows up at the ingest edge, where Kafka topics and streaming pipelines want cheap appends and clean schema evolution. JSON is the opposite: text, self-describing on every record, readable by anything without special tooling. Converting Avro to JSON is what you reach for when something downstream expects records rather than a binary table — an API payload, a fixture file, a document store, or just eyes on the data. This produces a single JSON array of objects, one per row. Because Avro is genuinely structured and so is JSON, the nesting survives the trip rather than flattening to text the way a CSV export would.

The catch is that JSON's type vocabulary is far thinner than Avro's, so the logical types degrade on the way out. Avro date, timestamp-millis and timestamp-micros values become strings, because JSON has no date type — the calendar meaning is preserved only as text you re-parse downstream. Decimals land as JSON numbers or as strings; keep high-precision values as strings if an IEEE-double parser (JavaScript, most notably) would round them past 2^53. Records map cleanly to objects, arrays to arrays, and Avro maps to objects — the nested shape round-trips well. Unions are the one thing to watch, but the ubiquitous ["null","T"] nullable union simply emits the value or null, exactly as you would expect.

Two honest caveats. First, size: a JSON array holds the entire result set in memory and repeats every field name on every record, so it inflates fast — if you are streaming the output or appending to it, JSONL (one object per line) is the better target. Second, the read: Avro is not bundled the way Parquet and CSV are, so DuckDB fetches its avro extension once from extensions.duckdb.org on the first read, then caches it — a fully air-gapped browser cannot read Avro. That network call pulls only the extension binary. Your Avro file itself never leaves your machine; the conversion runs entirely locally in DuckDB-WASM in your browser and is never uploaded.

Drop a file or click to browse

Drop a Avro file — processed locally, never uploaded

Frequently asked questions

Array or one object per line?
This page produces a single JSON array of objects. If you want NDJSON — one object per line, which is friendlier for streaming and large files — use the Avro to JSONL converter instead.
What happens to Avro logical types like dates and decimals?
They collapse to JSON's vocabulary. Date and timestamp logical types become strings, because JSON has no date type, so the calendar value is preserved only as text. Decimals come out as JSON numbers or strings; treat high-precision values as strings to avoid IEEE-double rounding above 2^53.
Does reading an Avro file work fully offline?
Not on the very first read. Avro isn't bundled like Parquet, CSV and JSON — DuckDB fetches its avro extension once from extensions.duckdb.org, then caches it, so a truly air-gapped browser can't read Avro. That call pulls only the extension binary; your Avro file itself is read entirely in the browser and never leaves your machine.
Is my file uploaded anywhere?
No. The Avro→JSON conversion runs entirely in your browser via DuckDB-WASM. Your file never leaves your device.
How large a file can I convert?
It's bounded by your browser's available memory rather than any server limit — files in the hundreds of MB are routine. DuckDB runs single-threaded here, so very large files just take a little longer.
Do I need an account?
No — it's free and requires no sign-up.

Do more with your Avro file

Related conversions