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']

Back to top

## 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.

Back to top

## 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

Back to top

## 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)]

Back to top

## 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).

Back to top

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