Suppose, I have employee details like below
emps.json
{
"emps" : [
{
"id" : 1,
"name" : "Krishna",
"age" : 34
},
{
"id" : 2,
"name" : "Gopi",
"age" : 39
},
{
"id" : 3,
"name" : "Ram",
"age" : 24
},
{
"id" : 4,
"name" : "Arun",
"age" : 34
}
]
}
Sort the data by age
Step 1: Get the JsonNode from given json.
ObjectMapper objectMapper = new ObjectMapper();
String empsInfo = resourceAsString("emps.json");
JsonNode jsonNode = objectMapper.readTree(empsInfo);
JsonNode empsNode = jsonNode.get("emps");
Step 2: Sort the empsNode by age.
List<JsonNode> dataNodes = empsNode.findParents("age");
List<JsonNode> nodesByAge = dataNodes.stream().sorted(Comparator.comparing(o -> o.get("age").asInt())).collect(Collectors.toList());
Find the below working application.
App.java
package com.sample.app;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
public class App {
public static String resourceAsString(String resourceName) throws IOException {
ClassLoader classLoader = App.class.getClassLoader();
URL url = classLoader.getResource(resourceName);
if (url == null) {
return null;
}
URLConnection urlConnection = url.openConnection();
urlConnection.setUseCaches(false);
try (InputStreamReader inputStreamReader = new InputStreamReader(urlConnection.getInputStream())) {
char[] buffer = new char[1048];
StringBuilder builder = new StringBuilder();
int count = -1;
while ((count = inputStreamReader.read(buffer, 0, buffer.length)) != -1) {
builder.append(buffer, 0, count);
}
return builder.toString();
}
}
public static void main(String[] args) throws IOException {
ObjectMapper objectMapper = new ObjectMapper();
String empsInfo = resourceAsString("emps.json");
JsonNode jsonNode = objectMapper.readTree(empsInfo);
JsonNode empsNode = jsonNode.get("emps");
List<JsonNode> dataNodes = empsNode.findParents("age");
List<JsonNode> nodesByAge = dataNodes.stream().sorted(Comparator.comparing(o -> o.get("age").asInt()))
.collect(Collectors.toList());
System.out.println("Sort by age");
for (JsonNode emp : nodesByAge) {
System.out.println(emp);
}
System.out.println("\nSort by name");
dataNodes = empsNode.findParents("name");
List<JsonNode> nodesByName = dataNodes.stream().sorted(Comparator.comparing(o -> o.get("name").asText()))
.collect(Collectors.toList());
for (JsonNode emp : nodesByName) {
System.out.println(emp);
}
}
}
Output
Sort by age {"id":3,"name":"Ram","age":24} {"id":1,"name":"Krishna","age":34} {"id":4,"name":"Arun","age":34} {"id":2,"name":"Gopi","age":39} Sort by name {"id":4,"name":"Arun","age":34} {"id":2,"name":"Gopi","age":39} {"id":1,"name":"Krishna","age":34} {"id":3,"name":"Ram","age":24}
No comments:
Post a Comment