diff --git a/json-modules/json-operations/README.md b/json-modules/json-operations/README.md
new file mode 100644
index 000000000000..512b64d9b27e
--- /dev/null
+++ b/json-modules/json-operations/README.md
@@ -0,0 +1,2 @@
+## Relevant Articles
+
diff --git a/json-modules/json-operations/pom.xml b/json-modules/json-operations/pom.xml
new file mode 100644
index 000000000000..fc9f01e4347d
--- /dev/null
+++ b/json-modules/json-operations/pom.xml
@@ -0,0 +1,33 @@
+
+
+ 4.0.0
+ org.baeldung
+ json-operations
+ json-operations
+
+
+ com.baeldung
+ json-modules
+ 1.0.0-SNAPSHOT
+
+
+
+
+ com.google.code.gson
+ gson
+ ${gson.version}
+
+
+ com.fasterxml.jackson.core
+ jackson-databind
+ ${jackson.version}
+
+
+
+
+ 2.11.0
+
+
+
diff --git a/json-modules/json-operations/src/main/java/com/baeldung/sorting/SolarEvent.java b/json-modules/json-operations/src/main/java/com/baeldung/sorting/SolarEvent.java
new file mode 100644
index 000000000000..457fde006388
--- /dev/null
+++ b/json-modules/json-operations/src/main/java/com/baeldung/sorting/SolarEvent.java
@@ -0,0 +1,103 @@
+package com.baeldung.sorting;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+class SolarEvent {
+
+ @JsonProperty("event_name")
+ private String eventName;
+ @JsonProperty("date")
+ private String date;
+ @JsonProperty("coordinates")
+ private Coordinates coordinates;
+ @JsonProperty("type")
+ private String type;
+ @JsonProperty("class")
+ private String eventClass;
+ @JsonProperty("size")
+ private String size;
+ @JsonProperty("speed_km_per_s")
+ private int speedKmPerS;
+
+ public String getEventName() {
+ return eventName;
+ }
+
+ public void setEventName(String eventName) {
+ this.eventName = eventName;
+ }
+
+ public String getDate() {
+ return date;
+ }
+
+ public void setDate(String date) {
+ this.date = date;
+ }
+
+ public Coordinates getCoordinates() {
+ return coordinates;
+ }
+
+ public void setCoordinates(Coordinates coordinates) {
+ this.coordinates = coordinates;
+ }
+
+ public String getType() {
+ return type;
+ }
+
+ public void setType(String type) {
+ this.type = type;
+ }
+
+ public String getEventClass() {
+ return eventClass;
+ }
+
+ public void setEventClass(String eventClass) {
+ this.eventClass = eventClass;
+ }
+
+ public String getSize() {
+ return size;
+ }
+
+ public void setSize(String size) {
+ this.size = size;
+ }
+
+ public int getSpeedKmPerS() {
+ return speedKmPerS;
+ }
+
+ public void setSpeedKmPerS(int speedKmPerS) {
+ this.speedKmPerS = speedKmPerS;
+ }
+}
+
+class Coordinates {
+
+ @JsonProperty("latitude")
+ private double latitude;
+
+ @JsonProperty("longitude")
+ private double longitude;
+
+ public double getLatitude() {
+ return latitude;
+ }
+
+ public void setLatitude(double latitude) {
+ this.latitude = latitude;
+ }
+
+ public double getLongitude() {
+ return longitude;
+ }
+
+ public void setLongitude(double longitude) {
+ this.longitude = longitude;
+ }
+
+}
diff --git a/json-modules/json-operations/src/main/java/com/baeldung/sorting/SolarEventContainer.java b/json-modules/json-operations/src/main/java/com/baeldung/sorting/SolarEventContainer.java
new file mode 100644
index 000000000000..b347ac777af3
--- /dev/null
+++ b/json-modules/json-operations/src/main/java/com/baeldung/sorting/SolarEventContainer.java
@@ -0,0 +1,20 @@
+package com.baeldung.sorting;
+
+import java.util.List;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+public class SolarEventContainer {
+
+ @JsonProperty("solar_events")
+ private List solarEvents;
+
+ // Getters and setters
+ public List getSolarEvents() {
+ return solarEvents;
+ }
+
+ public void setSolarEvents(List solarEvents) {
+ this.solarEvents = solarEvents;
+ }
+}
diff --git a/json-modules/json-operations/src/test/java/com/baeldung/sorting/JsonObjectSortingUnitTest.java b/json-modules/json-operations/src/test/java/com/baeldung/sorting/JsonObjectSortingUnitTest.java
new file mode 100644
index 000000000000..e61ef7d1f86e
--- /dev/null
+++ b/json-modules/json-operations/src/test/java/com/baeldung/sorting/JsonObjectSortingUnitTest.java
@@ -0,0 +1,75 @@
+package com.baeldung.sorting;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileReader;
+import java.io.IOException;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+
+import org.junit.jupiter.api.Test;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.google.gson.JsonArray;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonParser;
+import com.google.gson.stream.JsonReader;
+
+class JsonObjectSortingUnitTest {
+
+ @Test
+ void givenJsonObject_whenUsingJackson_thenSortedBySpeedCorrectly() throws IOException {
+ ObjectMapper objectMapper = new ObjectMapper();
+ SolarEventContainer container = objectMapper.readValue(
+ new File("src/test/resources/solar_events.json"), SolarEventContainer.class);
+
+ List events = container.getSolarEvents();
+ Collections.sort(events, Comparator.comparingInt(event -> event.getSpeedKmPerS()));
+
+ assertEquals(100, events.get(0)
+ .getSpeedKmPerS());
+ assertEquals(500, events.get(1)
+ .getSpeedKmPerS());
+ assertEquals(1000, events.get(2)
+ .getSpeedKmPerS());
+ assertEquals(1500, events.get(3)
+ .getSpeedKmPerS());
+ }
+
+ @Test
+ public void givenJsonObject_whenUsingGson_thenSortedBySizeCorrectly() throws FileNotFoundException {
+ JsonReader reader = new JsonReader(new FileReader("src/test/resources/solar_events.json"));
+ JsonElement element = JsonParser.parseReader(reader);
+ JsonArray events = element.getAsJsonObject().getAsJsonArray("solar_events");
+ List list = events.asList();
+
+ Collections.sort(list, (a, b) -> {
+ double latA = a.getAsJsonObject()
+ .getAsJsonObject("coordinates")
+ .get("latitude")
+ .getAsDouble();
+ double latB = b.getAsJsonObject()
+ .getAsJsonObject("coordinates")
+ .get("latitude")
+ .getAsDouble();
+ return Double.compare(latA, latB);
+ });
+
+ assertEquals(-5, getJsonAttributeAsInt(list.get(0)));
+ assertEquals(0, getJsonAttributeAsInt(list.get(1)));
+ assertEquals(15, getJsonAttributeAsInt(list.get(2)));
+ assertEquals(37, getJsonAttributeAsInt(list.get(3)));
+ }
+
+ private int getJsonAttributeAsInt(JsonElement element) {
+ return element.getAsJsonObject()
+ .getAsJsonObject("coordinates")
+ .get("latitude")
+ .getAsInt();
+ }
+
+}
diff --git a/json-modules/json-operations/src/test/resources/solar_events.json b/json-modules/json-operations/src/test/resources/solar_events.json
new file mode 100644
index 000000000000..d1388628e17d
--- /dev/null
+++ b/json-modules/json-operations/src/test/resources/solar_events.json
@@ -0,0 +1,44 @@
+{
+ "solar_events": [
+ {
+ "event_name": "Solar Eclipse",
+ "date": "2024-04-08",
+ "coordinates": {
+ "latitude": 37.7749,
+ "longitude": -122.4194
+ },
+ "size": "Large",
+ "speed_km_per_s": 1000
+ },
+ {
+ "event_name": "Solar Flare",
+ "date": "2023-10-28",
+ "coordinates": {
+ "latitude": 0,
+ "longitude": 0
+ },
+ "size": "Small",
+ "speed_km_per_s": 100
+ },
+ {
+ "event_name": "Sunspot",
+ "date": "2023-11-15",
+ "coordinates": {
+ "latitude": 15,
+ "longitude": -75
+ },
+ "size": "Large",
+ "speed_km_per_s": 1500
+ },
+ {
+ "event_name": "Coronal Mass Ejection",
+ "date": "2024-01-10",
+ "coordinates": {
+ "latitude": -5,
+ "longitude": 80
+ },
+ "size": "Medium",
+ "speed_km_per_s": 500
+ }
+ ]
+}
\ No newline at end of file
diff --git a/json-modules/pom.xml b/json-modules/pom.xml
index 70b64624d485..36f9a0fb2945 100644
--- a/json-modules/pom.xml
+++ b/json-modules/pom.xml
@@ -18,6 +18,7 @@
json-2
json-arrays
json-conversion
+ json-operations
json-path
gson
gson-2
@@ -38,4 +39,4 @@
20240303
-
\ No newline at end of file
+