JSONPath / JMESPath query tester — paste JSON, write a path, see matched values + matched paths highlighted live.
- Runs locally
- Category Developer & DevOps
- Best for Formatting, validating, shrinking, or inspecting code-adjacent text.
[ "Nigel Rees", "Evelyn Waugh", "Herman Melville", "J. R. R. Tolkien" ]
- $['store']['book'][0]['author']
- $['store']['book'][1]['author']
- $['store']['book'][2]['author']
- $['store']['book'][3]['author']
What this tool does
Free online JSONPath and JMESPath tester. Paste any JSON, switch between the two query languages with one click, and see matched values plus matched paths render instantly as you type. Bookstore example is pre- loaded so you can play with `$.store.book[*].author`, filter expressions like `[?(@.price < 10)]`, slices, recursive descent, regex match. Parser errors carry the exact offending position so you can fix syntax in place. One-click copy of the jq command or JS `.map().filter()` equivalent for taking the same query back to your terminal. 100% client-side — no uploads, ever.
Tool details
- Input
- Text + Numbers + Structured content
- The page exposes text boxes, numeric controls, file pickers, or structured inputs depending on the tool.
- Output
- Live result + Copy
- The result area focuses on usable output, with copy, download, or preview actions when supported.
- Privacy
- Browser-side processing
- The main tool logic does not call an external API, so inputs normally stay in the current tab.
- Save / share
- Shareable URL state
- Key settings are encoded in the URL so another person can reopen the same setup.
- Performance budget
- Initial JS <= 22 KB
- No WASM budget is declared, keeping the tool quick to open on mobile.
- Best fit
- Developer & DevOps · Developer
- Category and role tags drive related tools, internal links, and quick fit checks.
How to use
-
1. Input
Paste or drop your content into the tool panel.
-
2. Process
Click the button. All processing is local in your browser.
-
3. Copy / Download
Copy the result or download to disk in one click.
How JSONPath / JMESPath Query Tester fits into your work
Use it in the small gaps between coding, reviewing, debugging, and shipping.
Developer jobs
- Formatting, validating, shrinking, or inspecting code-adjacent text.
- Preparing snippets for documentation, tickets, commits, or handoff.
- Checking a small payload quickly without switching tools.
Developer checks
- Run irreversible transforms like minify or obfuscate on a copy.
- Keep secrets out of pasted snippets unless the tool explicitly stays local.
- Use your normal tests or linter before shipping transformed code.
Good next steps
These links move the current task into a more complete workflow.
- 1 CSV ⇄ JSON Converter Convert CSV to JSON or JSON to CSV — handles quoted commas, newlines in cells, custom delimiter — browser-only Open
- 2 JSON Formatter & Validator Format, validate, and minify JSON instantly — right in your browser. Open
- 3 Regex Tester Test JavaScript regex live — match highlighting, group capture, replace preview, flag toggles — browser-only Open
Real-world use cases
Pull every author name out of a 3 KB bookstore catalog
You ssh into a server, `cat catalog.json | pbcopy`, paste it here, type `$.store.book[*].author`, and the right panel lists four names with their exact paths (`$['store']['book'][0]['author']`, etc.). Copy the values, paste into a CSV, ship. The whole loop is about 12 seconds and your terminal is free for the next task.
Find every product cheaper than $10 across nested arrays
A merch API returns `data.categories[*].items[]` with hundreds of entries and a price field 4 levels deep. Paste the response, write `$..items[?(@.price < 10)]`, and you instantly see which items qualify — values on the right, paths on the left. Beats writing a throwaway Node script every time the merch team asks "what's under $10 today?".
Verify a feature flag exists for every tenant
You've shipped a new flag and want to confirm `tenants[*].flags.beta` is set in production. Paste the dump, query `$.tenants[?(@.flags.beta == true)].id` and the match count tells you exactly how many tenants got rolled in. If the count is wrong, the path list shows which tenant is missing — no SQL needed.
Sanity-check a JMESPath you're about to drop into an AWS CLI command
AWS CLI uses JMESPath for `--query`. Before you run `aws s3api list-objects-v2 --query "Contents[?Size < `1000`].Key"` against prod, paste the example response here, switch to JMESPath, and type the same query. If the result panel matches what you expected, you can run it for real; if not, you fix it without burning an API call.
Filter a webhook payload to just the fields you care about
A GitHub webhook is 18 KB and you only need `commits[*].author.email`. Paste the JSON, write the path, copy the matched-values output (already trimmed to just those emails as a JSON array), feed it to your downstream script. No `grep | jq` chain to typo.
Teach JSONPath syntax with a live example
You're explaining "recursive descent" to a junior. Paste the bookstore example, type `$..price`, point at the result: every price at any depth, listed with its full path. Switch to `$.store.book[*].price` to show the difference. Faster than screenshotting a README — the URL shares with the query baked in.
Common pitfalls
Forgetting the `@.` prefix inside a filter. `[?(price < 10)]` won't parse — the filter context is the current array element, so it has to be `[?(@.price < 10)]`. JMESPath drops both `$` and `@`, but JSONPath needs `@`.
Comparing a string to a number. If `price` is `"8.95"` in the JSON (with quotes), `[?(@.price < 10)]` matches nothing because `"8.95" < 10` is false. Either parse the JSON cleanly with numeric prices, or write `[?(@.price)]` to just test existence.
Treating `..` as a "skip levels" wildcard. `$..book` finds every `book` key at any depth, not "book somewhere under root" — so if your JSON has multiple unrelated `book` keys you get all of them. Pin it down with the full prefix when needed.
Privacy
JSON, query, parsed AST, evaluator state — every step happens in this browser tab. There is no upload, no analytics on the JSON you paste, no logging of the queries you write. Open DevTools → Network while you use the tool: zero requests carrying your payload. Safe to paste production responses, internal IDs, tokens, anything you wouldn't put in a public gist.
FAQ
Tool combos
Folks in your role tend to reach for these alongside this tool.
- Add Line Numbers Number every line of pasted text — set start, step and separator, zero-pad to align, skip blanks, or strip numbers back off — browser-only
- AES Text Encryptor Encrypt & decrypt text with a password — AES-256-GCM + PBKDF2 via WebCrypto — 100% in your browser, nothing uploaded
- Affine Cipher Encoder & Decoder Encrypt and decrypt the ax+b affine cipher with live modular-inverse check, browser-only
- Age Difference Calculator The exact gap between two birthdays — years/months/days, percentage, and the date one person is twice the other's age — browser-only