highjson
Compare, clean up, convert, check and search JSON in your browser.
- Runs on
- Web
- Status
- Available
- Version
- 0.1.0
- Source
- Closed source
- Built with
The problem
Most of my JSON work is small jobs. I compare two API responses, clean a payload, make types from a sample or check data against a schema. Each job usually needs a different website. Also, many JSON diffs match arrays by position. If you add one item at the top of a list, every item after it shows as changed.
What it does
highjson helps you work with JSON data in your browser. It puts six tools on one site, and you do not need to sign up.
- Compare two JSON files and see what changed, as a tree, a list of changes or a graph.
- Make messy JSON neat or small, and repair broken JSON.
- Change JSON into YAML, CSV, XML and other formats, and back.
- Make code that describes your data in TypeScript, Python, Go, Rust and other languages, from one sample.
- Check JSON against a set of rules (a JSON Schema), and see each error and where it is.
- Search inside JSON and see the values that match.

Compare shows the changes while you type. It knows when a list only changed its order, so it does not show false changes. You can ignore fields by name. You can save the result as a patch file, a report or an image.

Compare and Format also remember your past work in your browser.
Decisions & trade-offs
One diff for every view. I wrote one diff engine, and every view reads its result. The tree, the unified view, the graph and the export always show the same changes. The cost is that the patch export is a readable report, not always a patch that you can apply safely.
Match arrays by key only when it is safe. I match items by a key such as id only if every item has the key and each value is unique. A moved item is compared with itself, not with a different item. The cost is that one item without the key stops key matching for the full array.
Short share links, with a fallback. I store shared comparisons in a MongoDB database and give you a short link. If the database is not available, the link holds the two documents itself. The cost is that short links keep your documents on my server, and large documents make long fallback links.
A server route for URLs. I let the server get the JSON from a URL, because most APIs block requests from the browser. You can load JSON from these APIs in highjson. The cost is that the URL and its response go through my server, with a size limit and a time limit.
Local history instead of accounts. I save history in a SQLite database in your browser. You need no login, and your history does not go to a server. The cost is that history stays in that one browser, and if you clear the site data, you lose it.
What's next
I have no written roadmap yet. These are the limits that I know about:
- Large documents make typing slow, because the diff runs again after each edit.
- Share links do not expire.
- History works only in Compare and Format.
- There is no three-way merge, and there are no accounts.