tuliq
Runs in your browser

JSONPath Tester

Evaluate a JSONPath expression against your JSON and see every match update live as you type — wildcards, recursive descent, array slices, and filter expressions (e.g. [?(@.price>10)]) are all supported. Each result shows both its resolved, unambiguous path and its value, using jsonpath-plus, a widely-used JSONPath implementation. Paste your JSON directly or upload a .json file. Runs entirely client-side — nothing is uploaded.

PathValue
$['store']['book'][0]['title']"Sayings of the Century"
$['store']['book'][1]['title']"Sword of Honour"
$['store']['book'][2]['title']"The Lord of the Rings"

About this tool

This tool evaluates a JSONPath expression against your JSON and shows every match, live, as you type. JSONPath is to JSON what XPath is to XML — a compact query syntax for reaching into nested structures without writing a loop: $.store.book[*].title selects every book's title, $.store.book[?(@.price>10)] filters to books over a given price, and $..title recursively finds every title field at any depth. Each result shows both its resolved, unambiguous path (so $.store.book[0].title normalizes to $['store']['book'][0]['title']) and its value, which is useful for confirming exactly which element in an array a wildcard or filter actually matched. It runs entirely client-side using jsonpath-plus, a widely-used JSONPath implementation — nothing you paste or upload is ever sent anywhere.

What you can do

  • Query JSON with a JSONPath expression and see every match live
  • Paste your JSON directly, or upload a .json file
  • Wildcards, recursive descent, array slices, and filter expressions all supported
  • Nothing is uploaded — every query runs locally in your browser

How to use

Step 1

Add your JSON

Paste it directly, or upload a .json file.

Step 2

Write a JSONPath expression

Results update live as you type — each match shows its resolved path and value.

Step 3

Copy the matched values

Copy just the matched values as a JSON array.

Example

Against this JSON:

JSON

{
  "store": {
    "book": [
      { "title": "A", "price": 10 },
      { "title": "B", "price": 20 }
    ]
  }
}

JSONPath

$.store.book[?(@.price>15)].title

matches just "B" — the filter expression @.price>15 runs against each array element before .title is read off it.

How your data is handled

This tool is labeled 🟢 Browser: your JSON and JSONPath expression are evaluated directly in your browser using the jsonpath-plus library — nothing is uploaded to a server, and nothing about it is retained once you leave the page.

Frequently asked questions

What does $ mean at the start of an expression?+

It refers to the root of the JSON document — every JSONPath expression starts from there. $.store.book means "from the root, go into store, then book".

What's the difference between . and ..?+

A single dot (.store) steps into one named property. A double dot ($..title) is recursive descent — it searches every level of the document for a title field, however deeply nested.

How do filter expressions work?+

[?(@.price>10)] keeps only array elements where the condition is true — @ refers to the current element being tested. You can combine conditions with && and ||, e.g. [?(@.price>10 && @.category=="fiction")].

Why is my results table empty with no error?+

The expression is valid but nothing in your JSON matched it — check the field names and structure against what's actually in your document (JSON is case-sensitive).

Can I upload a file instead of pasting?+

Yes — the file picker next to the JSON box accepts a .json file directly.

Is my data uploaded anywhere?+

No — both your JSON and your JSONPath expression are evaluated directly in your browser using the jsonpath-plus library. Nothing here ever leaves your device.

Related tools