JSONL Filter
100% client-side. No upload.
Filter
JSONL Filter — No-Code
Filter a JSONL file by writing conditions in a form, not in jq. Pick a key path, an operator, and a value; combine multiple conditions with AND or OR; invert the result to get the non-matching rows. Supports regex, ranges, and exists/missing checks. 100% in-browser.
Operators
==/!=— equality (auto-coerces numeric strings vs numbers).>/>=/</<=— numeric comparison (parses both sides).contains/starts with/ends with— case-sensitive substring match.regex— JavaScript regex match. Use without slashes; theiflag is supported via the trailing-slash form, e.g./foo/i.in— value is one of a comma-separated set (admin,owner,root).exists/missing— the key path is or isn't present.between— numeric range (10..20inclusive).
Key path syntax
Dotted paths: id, user.email, meta.tags.0 for the
first element of an array. Bracket notation also works:
user["email address"] for keys with spaces.
Combining conditions
Choose AND to keep records where every condition is true; OR
to keep records where at least one is true. For more complex logic
((A AND B) OR (C AND D)), filter twice and concatenate, or fall back to the
Viewer's filter bar which supports nested expressions.
Tips & common pitfalls
- Numbers vs strings.
age == 30matches both30and"30". If you need strict, use== "30"with quotes. - Missing keys never match equality. A record without
emailwon't matchemail == "[email protected]"— useexistsormissingif that's the question. - Regex anchors. Use
^and$to anchor; otherwise the regex matches anywhere in the value.
Example
Conditions: role == admin AND age >= 30.
Input:
{"id":1,"role":"admin","age":30}
{"id":2,"role":"user","age":25}
{"id":3,"role":"admin","age":42}
{"id":4,"role":"admin","age":18}
Output:
{"id":1,"role":"admin","age":30}
{"id":3,"role":"admin","age":42}