Skip to main content

JSON Path Tester

A tool to test JSONPath expressions and extract desired values from JSON data. An essential tool for API response parsing and data analysis!

Result will appear here...

Common Patterns

Root
$
Root object
All Books
$.store.book[*]
All books in store
First Book
$.store.book[0]
First book
Last Book
$.store.book[-1]
Last book
Book Titles
$.store.book[*].title
All book titles
Books < $10
$.store.book[?(@.price < 10)]
Books cheaper than $10
Books with ISBN
$.store.book[?(@.isbn)]
Books with ISBN
All Prices
$.store..price
All prices (recursive)

Syntax Guide:

  • $ - Root object
  • @ - Current object
  • . or [] - Child operator
  • .. - Recursive descent
  • * - Wildcard
  • [start:end] - Array slice
  • [?(<expr>)] - Filter expression

What is JSONPath?​

JSONPath is an expression language for querying values in JSON data structures. Just like XPath does for XML, JSONPath allows you to extract specific data from JSON.

Key Syntax​

Basic Operators​

OperatorDescriptionExample
$Root object$
@Current object (inside filter)@.price
. or []Child element$.store.book
..Recursive search$..price
*Wildcard$.store.*
[n]Array index$.store.book[0]
[start:end]Array slice$.store.book[0:2]
[?(<expr>)]Filter expression$..book[?(@.price < 10)]

Array Indexing​

// First element
$.store.book[0]

// Last element
$.store.book[-1]

// Range (from 0 to before index 2)
$.store.book[0:2]

// All elements
$.store.book[*]

Filter Expressions​

// Books with price less than 10
$.store.book[?(@.price < 10)]

// Books that have ISBN
$.store.book[?(@.isbn)]

// Books in fiction category
$.store.book[?(@.category === 'fiction')]

// Books with specific word in title
$.store.book[?(@.title.includes('Moby'))]

Practical Examples​

Extracting Data from API Response​

// API response
{
"users": [
{ "id": 1, "name": "John", "active": true },
{ "id": 2, "name": "Jane", "active": false },
{ "id": 3, "name": "Bob", "active": true }
]
}

// Extract only active users
$.users[?(@.active === true)]

// All user names
$.users[*].name
// Complex JSON
{
"company": {
"departments": [
{
"name": "Engineering",
"employees": [
{ "name": "Alice", "salary": 100000 },
{ "name": "Bob", "salary": 90000 }
]
},
{
"name": "Sales",
"employees": [
{ "name": "Charlie", "salary": 80000 }
]
}
]
}
}

// All employee salaries
$..employees[*].salary

// Employees with salary >= 90000
$..employees[?(@.salary >= 90000)]

Processing Array Data​

// E-commerce data
{
"products": [
{ "name": "Laptop", "price": 1000, "stock": 5 },
{ "name": "Mouse", "price": 20, "stock": 0 },
{ "name": "Keyboard", "price": 50, "stock": 10 }
]
}

// Products in stock
$.products[?(@.stock > 0)]

// Price range (20 ~ 100)
$.products[?(@.price >= 20 && @.price <= 100)]

Use Cases​

1. API Testing and Debugging​

// Extract error messages from GraphQL response
$.errors[*].message

// REST API pagination data
$.data.items[*]

2. Data Analysis​

// Filter data by specific conditions
$..transactions[?(@.amount > 1000)]

// Collect statistical data
$..metrics[*].value

3. Configuration File Parsing​

// Extract specific environment configuration
$.environments[?(@.name === 'production')]

// Enabled feature flags
$.features[?(@.enabled === true)].name

4. Log Analysis​

// Filter error logs only
$.logs[?(@.level === 'error')]

// Logs within specific time range
$.logs[?(@.timestamp > 1234567890)]

Comparison Operators​

Available operators in JSONPath filters:

  • === - Equal
  • !== - Not equal
  • < - Less than
  • <= - Less than or equal
  • > - Greater than
  • >= - Greater than or equal
  • && - AND
  • || - OR

Usage Tips​

1. Step-by-Step Testing​

Test complex paths by breaking them down:

// Step 1: $.store
// Step 2: $.store.book
// Step 3: $.store.book[*]
// Step 4: $.store.book[*].title

Use .. when structure is unknown:

// Find all price fields
$..price

3. Combining Filters​

Combine multiple conditions:

$..book[?(@.price < 10 && @.category === 'fiction')]

Important Notes​

  • JSONPath expressions are case-sensitive
  • Use @ to reference the current object inside filter expressions
  • Array slicing works similarly to Python (start inclusive, end exclusive)
  • Syntax may vary slightly between different implementations

Additional Resources​