Similar to XPATH , JSONPath is a simple way to extract parts of a given document. The example below uses Github Issues JSON and due to the length of JSON it won't be included in the example.
Get all issues ids @Test
public void all_issues_ids () {
List < String > issueIds = JsonPath . read ( githubIssues , "$.[*].id" );
logger . info ( issueIds );
assertEquals ( 8 , issueIds . size ());
}
First issue title @Test
public void first_issue_title () {
String firstIssuesTitle = JsonPath . read ( githubIssues , "$.[0].title" );
logger . info ( firstIssuesTitle );
assertEquals ( "Use a generic origin (not the S3 origin) when creating CloudFront dist" , firstIssuesTitle );
}
Issues authored by @Test
public void issues_authored_by () {
List < Object > issuesByAuthor = JsonPath . read ( githubIssues ,
"$.[*].user[?(@.login == 'laurilehmijoki')]" );
logger . info ( issuesByAuthor );
assertEquals ( 3 , issuesByAuthor . size ());
}
Issues labeled bug @Test
public void issues_labeled_as_bug () {
List < Object > bugs = JsonPath . read ( githubIssues , "$..labels[?(@.name==bug)]" );
// OR filter(where("name").is("bug")));
logger . info ( bugs );
assertEquals ( 1 , bugs . size ());
}
Open issues >= 30 @Test
public void issues_by_state_and_number () {
Filter <?> filter = Filter . filter (
Criteria . where ( "state" )
. is ( "open" )
. and ( "number" )
. gte ( 30 ));
List < Object > issuesByLabelAndAuthor = JsonPath . read ( githubIssues , "$.[?]" , filter );
logger . info ( issuesByLabelAndAuthor );
assertEquals ( 1 , issuesByLabelAndAuthor . size ());
}
Json path example posted by Justin Musgrove on 08 September 2013
Tagged: java and java-json
Share on: Facebook Google+
All the code on this page is available on github:
JsonPathExample.java