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

Back to top

Operators

OperatorDescription
$ 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