How to use JSON query
- Paste your data into JSON array. An object that contains an array also works; the first array inside it is used.
- Write Conditions (one per line) in the form
field operator value, such asscore > 80. - Choose Match: All conditions (every line must be true) or Any condition (at least one).
- Read Matches and Items searched, then copy the Matching items or download the table as CSV.
With no conditions, every item is returned.
What it does and when to use it
When an API returns hundreds of records and you need the few that matter, scrolling and searching for text is slow and error-prone. Write the rule once and the tool lists exactly the items that pass. Typical uses: open tickets with a billing tag, orders over a value, users with no email address, log entries from a list of hosts, or products whose name matches a pattern.
Operators: ==, !=, >, >=, <, <=, contains, startsWith, endsWith, matches, in, !in (also written not in), exists and !exists. Fields can be paths such as address.city or items[0].sku. contains checks whether an array holds a value, or whether a string includes some text.
To select values by path rather than filter records, use the JSONPath tester. To filter and then sort or paginate, use the JSON array tools. The JSON to table view is handy for reading the full original list.
How it works
Each line is parsed into a field, an operator and a value. The value is read as JSON if possible, otherwise as plain text; for in and !in it is split on commas. Then every item in the array is tested, entirely in your browser. A comparison such as > is numeric when the field is a number, and text-based otherwise; a missing or null field never passes >, >=, < or <=. The matches keep their original order and are also shown as a table, with one column per key found.
Worked examples
Three support tickets (101 open/high/billing with no assignee, 102 closed/low/login, 103 open/medium/billing and refund, assigned to ben).
status == open
tags contains billing → Matches: 2 (tickets 101 and 103)
With Match set to Any condition:
assignee !exists
priority == high → Matches: 2 (102 has no assignee key, 101 is high)
Ticket 101 has "assignee": null, so it fails !exists and only matches because of its priority.
priority in high, medium
id >= 103 → Matches: 1 (ticket 103)
Limits and tips
- An unreadable line, such as
a ~ 1, stops the query with a message showing the expected form. - The tool reads the whole array into memory; very large exports may be slow to filter in a browser.
Frequently asked questions
Do I need quotes around text values?
Is matching case-sensitive?
Why did "7" and 7 both match code == 7?
What is the difference between null and a missing field?
Can I sort or pick fields as well?
How do we know nothing is uploaded? Test it yourself on the privacy proof page.