JSON Path Extractor
Query a documented JSONPath subset with typed results
A limited query subset: $, ASCII dot member names, single/double-quoted keys, non-negative indexes and [*] / .* wildcards. Bare member paths start at the root. Only JSON nodes are selected; array length is not a member. No recursion, slices, unions, negative indexes, filters or scripts. Results preserve JSON types; zero matches is a valid empty result.
Strict JSON: duplicate keys and numeric changes are rejected. Integers must be within ±9007199254740991; decimals must round-trip to the same decimal value. Negative zero is unsupported. Input ≤2 MiB, depth ≤128, values ≤100000, output ≤8 MiB; paths ≤8192 characters, query results ≤10000, array indexes 0–99999.
Processing stays in this page. No JSON or path drafts, query scripts, or input keys, paths and values in analytics.
The full guide also includes pitfalls, worked examples, snippets, FAQs, and related tools for checking results or troubleshooting.
About this tool
Inspect a JSON payload with a deliberately limited path syntax: $, ASCII dot member names, single- or double-quoted keys, non-negative indexes, and [*] or .* wildcards. Quoted keys support JSON-style escapes and keys containing dots or brackets. Results include the typed value, its type and a reusable double-quoted path. Member selectors read only object-owned JSON keys; array length and inherited JavaScript properties are not selected. Recursion, slices, unions, negative indexes, filters and scripts are rejected. Zero matches is a valid empty result. Optional deduplication preserves scalar types and object key order. Processing stays local, with strict numeric checks, 2 MiB input and at most 10000 matches.
Scenario Recipes
Extract typed API identifiers under an unusual key
Goal: Distinguish numeric IDs, string IDs and explicit null without losing their location.
- Paste {"orders.v2":[{"id":1},{"id":"1"},{"id":null}]}.
- Enter $["orders.v2"][*].id and run. Inspect the integer, string and null type cells.
- Enable deduplication and rerun; all three remain distinct. Copy or download the JSON rows and reuse a returned path to inspect one value.
Result: Three rows retain values 1, "1" and null at indexes 0, 1 and 2 under the literal orders.v2 key.
Failure Clinic (Common Pitfalls)
A familiar JSONPath expression fails or returns no rows
Cause: This subset does not implement recursive descent, slices, unions, filters or scripts. An object key selector also cannot read an array index, even when both are written as 0.
Fix: Use consecutive member/index selectors and immediate wildcards. For a literal key 0 choose ["0"]; for array index zero choose [0]. Use a dedicated full JSONPath engine when the required expression lies outside this subset.
A downstream export loses the distinction between 1 and "1"
Cause: Converting every match to display text merges distinct JSON types. Objects can also have different serialized key order despite similar contents.
Fix: Export the complete JSON rows, which include value and type, rather than copying table text. Deduplication uses full JSON serialization and keeps key-order differences; it is not an order-insensitive object equality check.
Production Snippets
A wildcard preserves types and produces reusable locations
text
Input:
{"orders.v2":[{"id":1},{"id":"1"},{"id":null}]}
Query: $["orders.v2"][*].id
Path Type JSON value
$["orders.v2"][0]["id"] integer 1
$["orders.v2"][1]["id"] string "1"
$["orders.v2"][2]["id"] null null
$["orders.v2"][3].id -> [] (valid query, no match)Frequently Asked Questions
Is this a complete JSONPath implementation?
No. It supports $, ASCII dot members, quoted keys, non-negative indexes and wildcards. Recursion, slices, unions, negative indexes, filters and scripts are errors. Returned double-quoted paths are this tool’s reusable format, not RFC 9535 Normalized Paths.
How do I select a key containing a dot, bracket or quote?
Use a bracketed JSON string, for example $["a.b"] or $["x]y"]. Escape a quote or backslash as in a JSON string. Empty keys use $[""]; single-quoted keys are also supported.
What do wildcards and indexes select?
[*] and .* select each immediate array item or object member; they do not recursively search descendants. [0] selects an array item, while ["0"] selects an object key. A bare users[*].email path starts at the root.
Why can a valid query return no matches?
The member may be absent or the selector may address the wrong container type. $.length does not select an array’s JavaScript length property. A valid query with no matching JSON nodes returns an empty array.
Does deduplication preserve value types?
Yes. Number 1 and string "1", or null and string "null", remain different. Equality uses complete JSON serialization, so objects with different key order are retained. Path sorting is deterministic text ordering, not numeric index ordering.
Are numbers, size and privacy checked?
Duplicate keys and numbers that would change on serialization are rejected; use strings for exact large IDs. Input is limited to 2 MiB, 128 levels and 100000 values, paths to 8192 characters, matches to 10000, and output to 8 MiB. No input or path drafts are saved; analytics excludes their content.
Keep browsing