Open several JSON or JSONL files at once -- an orders.json here, a
customers.json there -- and JSON Join discovers how they link, draws the
relationships as a schema diagram, and lets you query across all of them with real SQL.
Entirely in your browser: no upload, no server, no account.
This is a different job from viewing one document. The rest of Json Web Viewer's toolset works on a single JSON document at a time -- format it, walk its tree, diff it against another. JSON Join is for the moment your data is several files that reference each other by ID, and the question you actually have is a join: "which customers placed the failed orders?" That's a query, so JSON Join gives you a query language built for it -- SQL, running on DuckDB compiled to WebAssembly, inside your tab.
Link discovery is automatic. Drop your files in and JSON Join inspects the columns, finds fields in one file whose values match another file's keys, and proposes the relationships -- shown as a node-link diagram of your tables, not a guess you have to reverse- engineer yourself. You can re-run discovery any time, and the proposed joins become the starting point for your own SQL.
Before you click through, an honest heads-up about size: JSON Join's SQL engine (DuckDB-WASM) is a ~34 MB WebAssembly download -- measured at 34,242,586 bytes on the live site -- which is materially larger than anything else in this toolset (the next-largest engine here, jq, is under 1 MB). It downloads once, when the app loads, and your browser caches it after that. On a fast connection it's a few seconds; on a slow or metered one it's a real cost, and you deserve to know that before the click, not after.
Open JSON Join →
JSON Join is its own app at jsonwebviewer.com/jsonjoin/ -- the link opens it
directly, and a "Try it with sample data" button inside gives you linked example files to query
without opening any of your own.
No. Your files are read locally and loaded into a database engine (DuckDB, compiled to WebAssembly) running inside the browser tab itself. Queries run there too. Nothing -- not the files, not the queries, not the results -- is sent over the network.
JSON Join ships a full analytical SQL engine, DuckDB, compiled to WebAssembly -- measured at 34,242,586 bytes on the live site. That's the price of running real SQL (joins, aggregates, window functions) client-side instead of on a server. It downloads once when the app loads and is cached by your browser afterwards; it is not re-downloaded per query or per visit. None of the other tools on this site carry it -- it loads only if you open JSON Join.
JSON (a document per file, including an array of objects) and JSONL / NDJSON (one JSON object per line). You can open several files at once, and mix the two formats freely.
After loading, it inspects the columns of every table and looks for fields in one file whose values match another file's key values -- the classic foreign-key shape, like an order row carrying a customer_id. Matches are proposed as links and drawn in a schema diagram; you can re-run discovery after adding more files, and you're free to write joins the discovery didn't propose.
DuckDB's SQL dialect -- real joins across your files, filters, aggregates, ordering, window functions. Each file you open becomes a table you can reference by name, and results appear in a table view you can read and copy from.
No -- it's a separate app in the same family, living at jsonwebviewer.com/jsonjoin/. It shares the same privacy rule (everything runs client-side, nothing is uploaded) but is built for multi-file querying rather than single-document viewing and editing.
Working with a single document instead? Query it with the jq Playground, or compare two documents with JSON Diff.