LoadRunner JsonPath
LoadRunner 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
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). |