🎓 Top 15 Udemy Courses (80-90% Discount): My Udemy Courses - Ramesh Fadatare — All my Udemy courses are real-time and project oriented courses.
▶️ Subscribe to My YouTube Channel (178K+ subscribers): Java Guides on YouTube
▶️ For AI, ChatGPT, Web, Tech, and Generative AI, subscribe to another channel: Ramesh Fadatare on YouTube
Introduction to JsonPath
JsonPath is a powerful library for querying and extracting data from JSON documents. The JsonPath.parse method is a fundamental part of this library, allowing you to parse JSON strings, files, or other sources into a JsonPath object for querying.
Check a complete guide to JsonPath library in Java: Guide to JsonPath Library in Java
Installation
Adding JsonPath to Your Project
To use JsonPath, add the following dependency to your pom.xml if you're using Maven:
<dependency>
<groupId>com.jayway.jsonpath</groupId>
<artifactId>json-path</artifactId>
<version>2.9.0</version> <!-- or the latest version -->
</dependency>
For Gradle:
implementation 'com.jayway.jsonpath:json-path:2.9.0'
Basic Usage of JsonPath.parse
Parsing JSON Strings
You can parse JSON strings into JsonPath objects for querying.
Example
import com.jayway.jsonpath.JsonPath;
import com.jayway.jsonpath.ReadContext;
public class JsonPathExample {
public static void main(String[] args) {
String json = "{ \"firstName\": \"Ravi\", \"lastName\": \"Kumar\", \"age\": 25 }";
ReadContext ctx = JsonPath.parse(json);
String firstName = ctx.read("$.firstName");
String lastName = ctx.read("$.lastName");
int age = ctx.read("$.age");
System.out.println("First Name: " + firstName);
System.out.println("Last Name: " + lastName);
System.out.println("Age: " + age);
}
}
Output
First Name: Ravi
Last Name: Kumar
Age: 25
Explanation: This example demonstrates basic parsing and querying of a JSON string using JsonPath. The $.firstName, $.lastName, and $.age paths are used to extract values from the JSON document.
Parsing JSON from a File
JsonPath can parse JSON from a file.
Example
import com.jayway.jsonpath.JsonPath;
import com.jayway.jsonpath.ReadContext;
import java.io.File;
import java.io.IOException;
public class JsonPathFileExample {
public static void main(String[] args) throws IOException {
File jsonFile = new File("employee.json");
ReadContext ctx = JsonPath.parse(jsonFile);
String firstName = ctx.read("$.firstName");
String lastName = ctx.read("$.lastName");
int age = ctx.read("$.age");
System.out.println("First Name: " + firstName);
System.out.println("Last Name: " + lastName);
System.out.println("Age: " + age);
}
}
Explanation: This example demonstrates parsing JSON from a file using JsonPath. The parse method reads the JSON file and the read method extracts the values.
Parsing JSON from InputStream
JsonPath can also parse JSON from an InputStream.
Example
import com.jayway.jsonpath.JsonPath;
import com.jayway.jsonpath.ReadContext;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
public class JsonPathInputStreamExample {
public static void main(String[] args) {
String json = "{ \"firstName\": \"Lakshmi\", \"lastName\": \"Iyer\", \"age\": 35 }";
InputStream jsonInputStream = new ByteArrayInputStream(json.getBytes(StandardCharsets.UTF_8));
ReadContext ctx = JsonPath.parse(jsonInputStream);
String firstName = ctx.read("$.firstName");
String lastName = ctx.read("$.lastName");
int age = ctx.read("$.age");
System.out.println("First Name: " + firstName);
System.out.println("Last Name: " + lastName);
System.out.println("Age: " + age);
}
}
Explanation: This example demonstrates parsing JSON from an InputStream. The parse method reads the JSON data from the InputStream and the read method extracts the values.
Parsing JSON with a Configuration
You can customize the parsing behavior using a configuration.
Example
import com.jayway.jsonpath.Configuration;
import com.jayway.jsonpath.JsonPath;
import com.jayway.jsonpath.Option;
import com.jayway.jsonpath.ReadContext;
public class JsonPathConfigExample {
public static void main(String[] args) {
String json = "{ \"firstName\": \"Sunil\", \"lastName\": \"Gupta\", \"age\": 40 }";
Configuration conf = Configuration.defaultConfiguration().addOptions(Option.ALWAYS_RETURN_LIST);
ReadContext ctx = JsonPath.using(conf).parse(json);
// With ALWAYS_RETURN_LIST option, the result will always be a list
Object firstName = ctx.read("$.firstName");
System.out.println("First Name: " + firstName);
}
}
Output
First Name: [Sunil]
Explanation: This example demonstrates customizing the parsing behavior using a configuration. The ALWAYS_RETURN_LIST option ensures that the result is always returned as a list.
Advanced Features
Extracting Nested JSON Objects
JsonPath can extract nested JSON objects and arrays.
Example
import com.jayway.jsonpath.JsonPath;
import com.jayway.jsonpath.ReadContext;
public class JsonPathNestedExample {
public static void main(String[] args) {
String json = "{ \"name\": \"Anil\", \"address\": { \"street\": \"Park Avenue\", \"city\": \"Mumbai\" }, \"age\": 45 }";
ReadContext ctx = JsonPath.parse(json);
String street = ctx.read("$.address.street");
String city = ctx.read("$.address.city");
int age = ctx.read("$.age");
System.out.println("Street: " + street);
System.out.println("City: " + city);
System.out.println("Age: " + age);
}
}
Output
Street: Park Avenue
City: Mumbai
Age: 45
Explanation: This example demonstrates extracting nested JSON objects. The $.address.street and $.address.city paths are used to access nested properties within the address object.
Filtering JSON Arrays
JsonPath supports filtering JSON arrays based on certain conditions.
Example
import com.jayway.jsonpath.JsonPath;
import com.jayway.jsonpath.ReadContext;
import java.util.List;
public class JsonPathFilterExample {
public static void main(String[] args) {
String json = "{ \"employees\": [ { \"name\": \"Ramesh\", \"salary\": 50000 }, { \"name\": \"Suresh\", \"salary\": 40000 }, { \"name\": \"Mahesh\", \"salary\": 60000 } ] }";
ReadContext ctx = JsonPath.parse(json);
List<String> highSalaryEmployees = ctx.read("$.employees[?(@.salary > 45000)].name");
System.out.println("High Salary Employees: " + highSalaryEmployees);
}
}
Output
High Salary Employees: [Ramesh, Mahesh]
Explanation: This example demonstrates filtering JSON arrays. The $.employees[?(@.salary > 45000)].name path is used to filter and extract the names of employees with a salary greater than 45000.
Using Wildcards
JsonPath supports wildcards to select multiple elements.
Example
import com.jayway.jsonpath.JsonPath;
import com.jayway.jsonpath.ReadContext;
import java.util.List;
public class JsonPathWildcardExample {
public static void main(String[] args) {
String json = "{ \"employees\": [ { \"name\": \"Ramesh\", \"salary\": 50000 }, { \"name\": \"Suresh\", \"salary\": 40000 }, { \"name\": \"Mahesh\", \"salary\": 60000 } ] }";
ReadContext ctx = JsonPath.parse(json);
List<String> allNames = ctx.read("$.employees[*].name");
System.out.println("All Employee Names: " + allNames);
}
}
Output
All Employee Names: [Ramesh, Suresh, Mahesh]
Explanation: This example demonstrates using wildcards to select multiple elements. The $.employees[*].name path selects the name property of all elements in the employees array.
Modifying JSON
JsonPath can be used to modify JSON documents.
Example
import com.jayway.jsonpath.JsonPath;
import com.jayway.jsonpath.DocumentContext;
public class JsonPathModifyExample {
public static void main(String[] args) {
String json = "{ \"firstName\": \"Raj\", \"lastName\": \"Verma\", \"age\": 33 }";
DocumentContext ctx = JsonPath.parse(json);
ctx.set("$.age", 34);
ctx.put("$", "city", "Hyderabad");
String modifiedJson = ctx.jsonString();
System.out.println("Modified JSON: " + modifiedJson);
}
}
Output
Modified JSON: {"firstName":"Raj","lastName":"Verma","age":34,"city":"Hyderabad"}
Explanation: This example demonstrates modifying JSON documents. The set method is used to update the age property, and the put method is used to add a new city property.
Parsing JSON from InputStream
JsonPath
can also parse JSON from an InputStream.
Example
import com.jayway.jsonpath.JsonPath;
import com.jayway.jsonpath.ReadContext;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
public class JsonPathInputStreamExample {
public static void main(String[] args) {
String json = "{ \"firstName\": \"Arun\", \"lastName\": \"Kumar\", \"age\": 28 }";
InputStream jsonInputStream = new ByteArrayInputStream(json.getBytes(StandardCharsets.UTF_8));
ReadContext ctx = JsonPath.parse(jsonInputStream);
String firstName = ctx.read("$.firstName");
String lastName = ctx.read("$.lastName");
int age = ctx.read("$.age");
System.out.println("First Name: " + firstName);
System.out.println("Last Name: " + lastName);
System.out.println("Age: " + age);
}
}
Explanation: This example demonstrates parsing JSON from an InputStream. The parse method reads the JSON data from the InputStream and the read method extracts the values.
Complex and Nested Examples
Complex JSON Structure
Example
import com.jayway.jsonpath.JsonPath;
import com.jayway.jsonpath.ReadContext;
import java.util.List;
public class JsonPathComplexExample {
public static void main(String[] args) {
String json = "{ \"organization\": { \"name\": \"Innovative Solutions\", \"departments\": [ { \"name\": \"Engineering\", \"employees\": [ { \"name\": \"Aman\", \"skills\": [ \"Java\", \"Spring\" ] }, { \"name\": \"Vandana\", \"skills\": [ \"Python\", \"Django\" ] } ] }, { \"name\": \"HR\", \"employees\": [ { \"name\": \"Pooja\", \"skills\": [ \"Recruitment\", \"Training\" ] }, { \"name\": \"Ajay\", \"skills\": [ \"Employee Relations\", \"Payroll\" ] } ] } ] } }";
ReadContext ctx = JsonPath.parse(json);
String organizationName = ctx.read("$.organization.name");
List<String> departmentNames = ctx.read("$.organization.departments[*].name");
List<String> amanSkills = ctx.read("$.organization.departments[*].employees[?(@.name == 'Aman')].skills[*]");
System.out.println("Organization Name: " + organizationName);
System.out.println("Department Names: " + departmentNames);
System.out.println("Aman's Skills: " + amanSkills);
}
}
Output
Organization Name: Innovative Solutions
Department Names: [Engineering, HR]
Aman's Skills: [Java, Spring]
Explanation: This example demonstrates querying a complex JSON structure. The paths $.organization.name, $.organization.departments[*].name, and $.organization.departments[*].employees[?(@.name == 'Aman')].skills[*] are used to extract various elements from the JSON document.
Nested JSON Arrays
Example
import com.jayway.jsonpath.JsonPath;
import com.jayway.jsonpath.ReadContext;
import java.util.List;
public class JsonPathNestedArraysExample {
public static void main(String[] args) {
String json = "{ \"library\": { \"name\": \"City Library\", \"sections\": [ { \"name\": \"Science\", \"books\": [ { \"title\": \"Physics\" }, { \"title\": \"Chemistry\" } ] }, { \"name\": \"Arts\", \"books\": [ { \"title\": \"History\" }, { \"title\": \"Geography\" } ] } ] } }";
ReadContext ctx = JsonPath.parse(json);
String libraryName = ctx.read("$.library.name");
List<String> sectionNames = ctx.read("$.library.sections[*].name");
List<String> bookTitles = ctx.read("$.library.sections[*].books[*].title");
System.out.println("Library Name: " + libraryName);
System.out.println("Section Names: " + sectionNames);
System.out.println("Book Titles: " + bookTitles);
}
}
Output
Library Name: City Library
Section Names: [Science, Arts]
Book Titles: [Physics, Chemistry, History, Geography]
Explanation: This example demonstrates querying nested JSON arrays. The paths $.library.name, $.library.sections[*].name, and $.library.sections[*].books[*].title are used to extract values from nested arrays.
Conclusion
The JsonPath.parse method is a fundamental part of this library. It allows you to parse JSON strings, files, or other sources into a JsonPath object for querying. For more detailed information and advanced features, refer to the official JsonPath documentation.My Top and Bestseller Udemy Courses. The sale is going on with a 70 - 80% discount. The discount coupon has been added to each course below:
Build REST APIs with Spring Boot 4, Spring Security 7, and JWT
[NEW] Learn Apache Maven with IntelliJ IDEA and Java 25
ChatGPT + Generative AI + Prompt Engineering for Beginners
Spring 7 and Spring Boot 4 for Beginners (Includes 8 Projects)
Available in Udemy for Business
Building Real-Time REST APIs with Spring Boot - Blog App
Available in Udemy for Business
Building Microservices with Spring Boot and Spring Cloud
Available in Udemy for Business
Java Full-Stack Developer Course with Spring Boot and React JS
Available in Udemy for Business
Build 5 Spring Boot Projects with Java: Line-by-Line Coding
Testing Spring Boot Application with JUnit and Mockito
Available in Udemy for Business
Spring Boot Thymeleaf Real-Time Web Application - Blog App
Available in Udemy for Business
Master Spring Data JPA with Hibernate
Available in Udemy for Business
Spring Boot + Apache Kafka Course - The Practical Guide
Available in Udemy for Business
Comments
Post a Comment
Leave Comment