One of the biggest strengths of XML is XPath, the query-oriented language to query subsections of an XML document. In the same line, JSONPath is a query language for JSON with features similar to XPath. JSONPath is used for selecting and extracting a JSON document’s property values.
To use JSONPath, we will need to include its dependency and then use it.
JSONPath Syntax
A JsonPath expression begins with the dollar sign ($
) character, which refers to the root element of a query. The dollar sign is followed by a sequence of child elements, which are separated via dot (code) notation or via the square brackets (code).
The important JSONPath syntax rules are:
$
symbol refers to the root object or element.@
symbol refers to the current object or element..
operator is the dot-child operator, which you use to denote a child element of the current element.[ ]
is the subscript operator, which you use to denote a child element of the current element (by name or index).*
operator is a wildcard, returning all objects or elements regardless of their names.,
operator is the union operator, which returns the union of the children or indexes indicated.:
operator is the array slice operator, so you can slice collections using the syntax[start:end:step]
to return a subcollection of a collection.( )
operator lets you pass a script expression in the underlying implementation’s script language. It’s not supported by every implementation of JSONPath, however.? ( )
to query all items that meet a certain criteria.
Example: JSONPath Expressions
$.store.book[0].title $.store.book[*].title $..book[3] //or using brackets $['store']['book'][0].['title'] $['store']['book'][*].['title'] $..['book'][3] $.store.book[?(@.price < 10)].title
JSONPath Example
We have the following JSON document. We will apply the JSONPath expressions on it.
{ "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 } } }
Example 1
Using JSONPath to find the names of all authors.
var response = jsonPath(store , "$..author").toJSONString();
Program output:
[ "Nigel Rees", "Evelyn Waugh", "Herman Melville", "J. R. R. Tolkien" ]
Example 2
Using JSONPath to find the details for book number 4. The array index is zero-based.
var response = jsonPath(store , "$..book[3]").toJSONString();
Program output:
[ { "category":"fiction", "author":"J. R. R. Tolkien", "title":"The Lord of the Rings", "isbn":"0-395-19395-8", "price":22.99 } ]
JSONPath Dependencies
Language | Dependency |
---|---|
JavaScript | JSONPath JavaScript File |
Node | npm install JSONPath |
PHP | JSONPath PHP include file |
Python | pip install jsonpath-rw |
Java | <dependency> <groupId>com.jayway.jsonpath</groupId> <artifactId>json-path</artifactId> <version>2.0.0</version> </dependency> |
Sachin Gainewar says
$.store.book[?(@.price < 10)].title
above line Throws an error of :-
"org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed: Script60.groovy: 93: expecting EOF, found '[" @ line 93, column 27. log.info $.store.book[?(@.price < 10)].title ^ org.codehaus.groovy.syntax.SyntaxException: expecting EOF, found '[' @ line 93, column 27. at org.codehaus.groovy.antlr.AntlrParserPlugin.transformCSTIntoAST(AntlrParserPlugin.java:143)
I am using groovy script in soupui editor
Kindly correct me
Abhineet says
kiruba says
This looks like the original passport JSON data. Please remove it as it violates the person’s privacy.
Noha says
Can i use jsonpath in url encoding?
Teja says
From the above data, how can I get person details who lived in Nashville for example. I am expecting the following result
Thank you!
ksk says
$.[?(@.city=="Nashville")]^^^^
Looks like this is working fine.
Rahul says
Can i transform the json string into another format. I want the JSON string to be transform into array of array where property name in book becomes the column names. ?
Sai says
Can i write regular expression to match the string in javascript. i saw it working in jay way which is for java but in javascript its not working.
Admin says
Yes,
string.match(regex)
takes regular expression in javascript.nshah says
How do I write back to json file using JSONPath ?
John says
nshah I don’t think it is possible to write json elements using JSONPath. Otherwise, it would surely be listed on this page.
Test says
How can I check if members contains ‘allUsers’
Admin says
Create XPath expression with help of information given in this xpath example.
Kanchan says
$•[?(@.members==”allUsers”]
sarika says
How can i append two string response from json using jsonpath ?
Ex. JsonResponse
I just want to append name and surname like
SITA MAHA LAKSHMI RAMADUGULA
.When i tried using
$['passport']['page_1']['name','surname']
its giving me value :that i don’t want. Any idea about it ??
Debi says
$.passport.page_1.(name & ' ' & surname)
Result : “SITA MAHA LAKSHMI RAMADUGULA”