Share this page

# JsonPath

JsonPath is based on Stefan Goessner’s JsonPath implementation (e1, e2, e3), and includes additional support for:

- multiple filters combined with logical operators && and ||
- regular expressions

In this topic:

## JsonPath expressions

JsonPath expressions always refer to a JSON structure, in the same way as XPath expressions are used in combination with an XML document. The "root member object" in JsonPath is always referred to as $, regardless of whether it is an object or array.

JsonPath expressions can use the dot–notation:

$.store.book[0].title

or the bracket–notation:

$['store']['book'][0]['title']

## Operators

Operator | Description
--- | ---
$ | The root element to query. This starts all path expressions.
@ | The current node 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. Expression must evaluate to a Boolean value.

## Attributes

If a current node is array, use the length attribute to retrieve its length.

Attribute | Description | Output
--- | --- | ---
@.length | Provides the length of an array | Integer

## Filter Operators

Filters are logical expressions used to filter arrays. A typical filter would be

[?(@.age > 18)]

where @ represents the current item being processed.

More complex filters can be created with logical operators && and ||.

String literals must be enclosed by single or double quotes

([?(@.color == 'blue')] or [?(@.color == "blue")]).

Operator | Description
--- | ---
== | left is equal to right (note that 1 is not equal to '1')
!= | left is not equal to right
< | left is less than right
<= | left is less or equal to right
> | left is greater than right
>= | left is greater than or equal to right
=~ | left matches a regular expression (JavaScript style), for example: [?(@.name =~ /foo.*?/i)]

## Example

The following is an example of a simple JSON structure built after an XML example representing a bookstore.

    { "store": {
    	"book": [
    	{ "category": "reference",
    	  "author": "Nigel Rees",
    	   "title": "Sayings of the Century",
    	   "price": 8.95
    	},
    	{ "category": "fiction",
    	   "author": "Evelyn Waugh",
    	   "title": "Sword of Honour",
    	   "price": 12.99
    	},
    	{ "category": "fiction",
    	   "author": "Herman Melville",
    	   "title": "Moby Dick",
    	   "isbn": "0-553-21311-3",
    	   "price": 8.99
    	},
    	{ "category": "fiction",
    	   "author": "J. R. R. Tolkien",
    	   "title": "The Lord of the Rings",
    	   "isbn": "0-395-19395-8",
    	   "price": 22.99
    	}
    	],
    	"bicycle": {
    	  "color": "red",
    	  "price": 19.95
    	}
       }
    }

JsonPath | Result
--- | ---
$.store.book[*].author | The authors of all books in the store.
$..author | All authors.
$.store.* | All things in the store, which are some books and a red bicycle.
$.store..price | The price of everything in the store.
$..book[2] | The third book.
$..book[(@.length-1)] $..book[-1:] | The last book in order.
$..book[0,1] $..book[:2] | The first two books.
$..book[?(@.isbn)] | Filter all books with isbn number.
$..book[?(@.price<10)] | Filter all books cheaper than 10.
$..* | All elements in the XML document. All members of JSON structure.
$..book[?(@.author =~ /.*REES/i)] | All books matching regex (ignoring case).

Tips to improve your search results... VuGen Function Reference Version 26.1-26.3 Function Reference 26.1-26.3 All View Local Help Center View Online Help Center Version: