JSON Path - Pick data from response
JSON Path is used to define what data a response variable should include.Â
Example the payload below:
{ "new": [ { "attributes": { "type": "Case", "url": "/services/data/v52.0/sobjects/Case/5002p00002b6ALIAA2" }, "Origin": "Phone", "Status": "New", "LastModifiedDate": "2021-10-07T09:13:38.000+0000", "IsDeleted": false, "Description": "with something", "Priority": "Medium", "IsClosed": false, "Subject": "I need help", "SystemModstamp": "2021-10-07T09:13:38.000+0000", "BusinessHoursId": "01m2p000000JHh2AAG", "CreatedById": "0052p000008e5mPAAQ", "IsEscalated": false, "OwnerId": "0052p000008e5mPAAQ", "CreatedDate": "2021-10-07T09:13:38.000+0000", "IsClosedOnCreate": false, "CaseNumber": "00001098", "Id": "5002p00002b6ALIAA2", "LastModifiedById": "0052p000008e5mPAAQ" } ], "old": [], "userId": "0052p000008e5mPAAQ" }
Picking the value caseNumber, then we need to look at the new array first element and pick the CaseNumber
Â
Â
JSON Path with spaces in variable name
If the payload contains variables with spaces like the example below;
{
"values": {
"Incident Number": "INC00456789098765"
}
}
Then use $.values["Incident Number"]
to fetch the value in the JSON path.
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. |
| Dot-notated child |
| Bracket-notated child or children |
| Array index or indexes |
| Array slice operator |
| Filter expression. Expression must evaluate to a boolean value. |
Functions
Functions can be invoked at the tail end of a path - the input to a function is the output of the path expression. The function output is dictated by the function itself.
Function | Description | Output |
---|---|---|
min() | Provides the min value of an array of numbers | Double |
max() | Provides the max value of an array of numbers | Double |
avg() | Provides the average value of an array of numbers | Double |
stddev() | Provides the standard deviation value of an array of numbers | Double |
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 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
{ "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 } }, "expensive": 10 }
JsonPath (click link to try) | Result |
---|---|
The authors of all books | |
All authors | |
All things, both books and bicycles | |
The price of everything | |
The third book | |
The second to last book | |
The first two books | |
All books from index 0 (inclusive) until index 2 (exclusive) | |
All books from index 1 (inclusive) until index 2 (exclusive) | |
Last two books | |
Book number two from tail | |
All books with an ISBN number | |
All books in store cheaper than 10 | |
All books in store that are not "expensive" | |
All books matching regex (ignore case) | |
Give me every thing | |
The number of books |
Some examples
Last item in an array
Path | Description |
---|---|
$.comments[-1:].body | Example usage of getting the last comment |
ServiceNow example: ServiceNow - Get last short_description