JSON Filter Tool
Filter JSON data by keys and values
JSON Filter Tool tool
Filter
JSON Filter Tool: key facts
- What it does
- Filter JSON data by keys and values
- Category
- Developer Tools
- Cost
- Free, with no account, sign-up, or install.
- Your data
- Runs entirely in your browser — the files and text you enter are never uploaded to a server.
- Last reviewed
- . Report an incorrect result.
About the JSON Filter Tool
An API response with hundreds of records is easy to produce and miserable to read. JSON Filter turns one into just the rows you care about: point it at a collection, describe what you want in rows of key, operator and value, and it returns the matching records — reshaped, sorted, and ready to copy.
The conditions are where the work happens. Each row takes a path, a comparison, and something to compare against, so "role equals admin", "logins at least 10", "profile.city contains zür", or "avatar does not exist" are all a few keystrokes apart. Rows combine with All or Any, an Invert switch flips the whole selection, and numeric comparisons genuinely compare numbers rather than matching digits inside them.
Two details save most of the guesswork. Arrays found anywhere in your document are offered as one-click sources, so records buried under a wrapper like data.users take one tap to reach. And every path the data actually contains is listed with its type and how often it occurs — click one to drop it straight into a condition instead of guessing at spelling.
How to use it
- Paste your JSON, or upload or drop a .json file.
- Pick the collection to work on: click one of the detected arrays, or type a source path such as data.users. Leaving it blank uses the whole document.
- Build conditions from a path, an operator (equals, contains, at least, matches regex, exists, type is, and more) and a value. Combine them with All or Any, and tick Invert to keep everything that does not match.
- Or use "search every value" to find records containing text at any depth, without naming a field.
- Open Output options to keep only certain fields, drop others, pluck a single field into a flat list, or sort and limit the results.
- Read the "X of Y items matched" line, then copy the result or download it as a .json file.
Why use this version
- There is no query syntax to learn — conditions are dropdowns and text boxes — yet you still get real comparisons, including greater-than, at-least, regex, type checks, and exists tests.
- Paths reach into nested data with dots, array indexes, and wildcards: profile.city, tags[0], or items[*].sku, where a wildcard matches if any element qualifies.
- Numeric operators compare numerically and simply skip values that are not numbers, so a stray "N/A" in a price column cannot quietly corrupt a range filter.
- When nothing matches, it explains why: how many records were scanned, how many even had the path you named, and a sample of the values it did find there.
- Awkward data is handled rather than fatal — a null or a bare string inside an array is skipped by key conditions instead of breaking the whole filter.
- Invalid JSON is reported with a line, a column, and the offending line marked with a caret, so a stray comma takes seconds to find.
- Everything happens in your browser. Nothing you paste or upload is sent anywhere, which matters when the data is a production API response.
Frequently Asked Questions
How do the conditions work together?
Each row is one comparison against a path. With Match set to "all", a record must satisfy every row; with "any", one is enough. Invert then flips the outcome, turning "keep the admins" into "keep everyone who is not an admin". Rows you have not finished filling in are simply ignored rather than treated as errors.
Can I filter on nested fields?
Yes. Write the path with dots and brackets — profile.city, addresses[0].postcode, or items[*].sku. A wildcard segment like [*] means "any element", so items[*].sku equals ABC keeps a record when any of its items has that SKU. The list of keys found in your data gives you the exact paths to click.
Can I filter on a numeric range, like price over 100?
Yes — choose "greater than", "at least", "less than", or "at most" and give a number. The comparison is numeric, so 90 does not match a filter for values containing 9, and records whose value is not a number are skipped instead of coerced into one.
My records are inside a wrapper object. What do I filter?
Set the source path to the collection itself, for example data.users. The tool scans your document for arrays and offers each one as a chip labelled with its path and item count, so usually you can just click the right one. If the source is a plain object instead of an array, its entries are filtered and you get an object back.
What do Include, Exclude and Pluck do?
Include keeps only the fields you list, Exclude removes the ones you list, and Pluck returns a flat array of a single path's values — handy for pulling out every email address. Include also accepts dotted paths and lifts them to a flat key of the same name, which is a quick way to flatten one nested field.
Why did a huge number come back slightly different?
JSON numbers are parsed as standard doubles, so integers beyond about 9 quadrillion lose precision — an ID like 12345678901234567890 will not survive the round trip exactly. That is a property of JSON parsing rather than this tool; if you need such IDs intact, keep them as strings in the source data.