Changelog
Every user-facing change to JSON Keyper, newest first. The full history, including every line of code, is in the GitHub repository. Found a bug? Tell me.
- New guide: How to Fix Common JSON Parse Errors, with the real Node.js and Python message for each cause.
- New guide: JSONPath Cheat Sheet: Syntax and Tested Examples, every result run under RFC 9535, and where libraries disagree.
- New guide: Why JSON Loses Big Numbers (and How to Keep IDs and Decimals Exact), why IDs above 2^53 change in JavaScript, and how to keep them exact.
- New guide: How to Spot Breaking Changes in a JSON API Response, comparing two responses by structure, in CI and in the browser.
- Added short FAQs to the flattener, JSONPath generator, TypeScript, tree viewer, diff, and formatter pages - including what each tool does not do.
- Corrected How to Extract All Keys: jq's
paths(scalars)drops keys whose value isfalse, not onlynull.
- New guide: How to Run a cURL Command Online and Extract JSON Keys, with three real APIs.
- JSON Diff's structure view now reads "null → number" instead of "null | null → number" when a field was only ever
null. - Revised How to Extract All Keys from a JSON Object: every method is now run on the same awkward document. It corrects the guide's recursive JavaScript, which mishandled arrays of arrays, and two jq commands - one that always returned nothing, and one that silently dropped keys with
nullvalues.
- New page: Run a cURL Command Online, covering which curl options work, what the API receives through the proxy, and every limit.
- More curl commands work, and each sends exactly what curl itself would:
-u(Basic auth),-A,-e,-b(cookies),-G,-I,--json, and properly encoded--data-urlencode. Options that read local files now explain why they cannot work, instead of failing with a misleading error. - Requests from the cURL runner now carry a
User-Agentidentifying JSON Keyper when the command sets none, as curl does, because some APIs - GitHub's among them - refuse requests without one. - New JSON Diff: compare two documents by value, by structure - with breaking changes flagged - or as a JSON Patch. Array items are matched by their ID, key order is ignored, and numbers are compared exactly as written.
- A Sponsor link now sits at the end of the header, and the footer link reads "Sponsor on GitHub". JSON Keyper stays free, with no accounts.
- Every tool now has a switcher across the top, the homepage lists all six tools, and the header has a Tools link. JSON you have pasted comes with you when you switch tools.
- Input and output use a monospace font, so formatted JSON and tree output line up.
- Redesigned the tool controls: the tools are now tabs under the header, each tool has one green button that runs it, Copy and Download sit under the output, and Clear moved next to Load and Upload on the input side. Statistics are more compact on phones.
- Page addresses no longer end in
.html- for example, jsonkeyper.com/about. Old links keep working. - New guide: Null, Missing, or Unknown - thirteen mismatched payloads through Jackson 2, Jackson 3, Pydantic, and Zod, with the scripts to reproduce it.
- Corrected Jackson vs Gson vs Moshi: its statements about unknown fields and checked exceptions were true of Jackson 2 only.
- Added my work history and the problems behind the guides to the About page.
- New JSON formatter: pretty-print with a 2- or 4-space indent, or minify, from the same format list. It changes only whitespace, so large integer IDs and values like
12.50come out exactly as pasted. - A trailing comma in invalid JSON is now reported with its line and column, instead of a truncated browser message.
- The four tool pages - JSON to TypeScript, JSONPath generator, JSON flattener, and tree viewer - now run the tool directly on the page, each with its own worked example: an issue-tracker response, a Kubernetes pod list, a payment webhook, and a GeoJSON file.
- TypeScript output now marks a field that is
nullon some records asT | nullinstead of taking the type of whichever record came first, and pools array elements across records, so an emptylabels: []on one record no longer hides the element type seen on another. - Rewrote the About and Contact pages, and corrected the privacy policy: Google Analytics sets first-party cookies, which the previous wording denied.
- Revised JSON vs XML with measured payload sizes and parse times, added a section on what JSON cannot represent to What is JSON?, and made the JSON tools guide recommend other tools on their merits.
- Expanded the About page with my background, how the site has grown, how the guides are written, and how it is funded; author details on every guide now say what I work in.
- Added this changelog.
- Added a Clear button to the Execute cURL panel, and documented the Execute cURL tab in the how-to section and the terms of service.
- New Execute cURL tab: paste a curl command and the tool fetches the live response through a proxy, then extracts its keys. See the privacy policy for what the proxy does and does not keep.
- New guides: CORS explained, processing large JSON files (with measured memory for jq and Python), and Jackson vs Gson vs Moshi.
- Corrected earlier claims that plain
jqstreams large files. It does not; the large-files guide measures why. - Fixed misaligned input and output columns and a stray focus outline on the input tabs.
- Removed unused JavaScript libraries to speed up page loads, and added link previews for social sharing.
- Performance work on page layout stability.
- Added the four format pages, and
?format=links that open the tool with an output format preselected.
- Six output formats instead of one: key paths, key paths with value types, unique key names, JSONPath, indented tree, and TypeScript interface.
- Collapse array indices, structure statistics, a built-in sample, file upload and drag-and-drop, Ctrl + Enter, and download.
- Parse errors now report the line and column of malformed JSON.
- Rebuilt the homepage with a worked example, a path-notation reference, and a limitations section. Corrected blog dates that had been shown wrongly, and added author information.
- Expanded the existing guides.
- Redesigned the site and added the blog, with nine guides on JSON basics, nested data, REST APIs, JSON Schema, and Python.
- First version: paste JSON, get every key path in dot notation.