JSONPath

1. What's it?

JSONPath is a tool for quickly filtering from JSON data.
Filter JSON data

Operator

Operator
Description
$
The root element to query. This starts all path expressions.
@
The current node is being processed by a filter predicate.
*
Wildcard. Available anywhere a name or numeric are required.
..
Deep scan. Available anywhere a name is required.
.<name>
Dot-notated child
['<name>' (, '<name>')]
Bracket-notated child or children
[<number> (, <number>)]
Array index or indexes
[start:end]
Array slice operator
[?(<expression>)]
Filter expression. The expression must evaluate to a boolean value.

Filter Operators

Filters are logical expressions used to filter arrays. A typical filter would be [?(@.age > 18)] where @ represents the current item being processed.
Operator
Description
==
left is equal to the right (note that 1 is not equal to '1')
!=
left is not equal to the right
<
left is less than right
<=
left is less or equal to the right
>
left is greater than right
>=
left is greater than or equal to the right
=~
left matches regular expression [?(@.name =~ /foo.*?/i)]
in
left exists in right [?(@.size in ['S', 'M'])]
nin
left does not exists in right
subsetof
left is a subset of right [?(@.sizes subsetof ['S', 'M', 'L'])]
anyof
left has an intersection with right [?(@.sizes anyof ['M', 'L'])]
noneof
left has no intersection with right [?(@.sizes noneof ['M', 'L'])]
size
size of left (array or string) should match right
empty
left (array or string) should be empty

Path Examples

Given the JSON Data.
1
{
2
"store": {
3
"book": [
4
{
5
"category": "reference",
6
"author": "Nigel Rees",
7
"title": "Sayings of the Century",
8
"price": 8.95
9
},
10
{
11
"category": "fiction",
12
"author": "Evelyn Waugh",
13
"title": "Sword of Honour",
14
"price": 12.99
15
},
16
{
17
"category": "fiction",
18
"author": "Herman Melville",
19
"title": "Moby Dick",
20
"isbn": "0-553-21311-3",
21
"price": 8.99
22
},
23
{
24
"category": "fiction",
25
"author": "J. R. R. Tolkien",
26
"title": "The Lord of the Rings",
27
"isbn": "0-395-19395-8",
28
"price": 22.99
29
}
30
],
31
"bicycle": {
32
"color": "red",
33
"price": 19.95
34
}
35
},
36
"expensive": 10
37
}
Copied!
JsonPath
Result
$.store.book[*].author
The authors of all books
$..author
All authors
$.store.*
All things, both books and bicycles
$.store..price
The price of everything
$..book[2]
The third book
$..book[-2]
The second to last book
$..book[0,1]
The first two books
$..book[:2]
All books from index 0 (inclusive) until index 2 (exclusive)
$..book[1:2]
All books from index 1 (inclusive) until index 2 (exclusive)
$..book[-2:]
Last two books
$..book[2:]
Book number two from tail
$..book[?(@.isbn)]
All books with an ISBN number
$.store.book[?(@.price < 10)]
All books in store cheaper than 10
$..book[?(@.price <= $['expensive'])]
All books in store that are not "expensive"
$..book[?(@.author =~ /.*REES/i)]
All books matching regex (ignore case)
$..*
Give me everything
$..book.length()
The number of books

Reference

Last modified 5mo ago