-
Notifications
You must be signed in to change notification settings - Fork 466
Home
abhishekrongali edited this page Jul 15, 2024
·
3 revisions
import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.ArrayNode; import com.fasterxml.jackson.databind.node.ObjectNode;
import java.io.IOException; import java.util.*;
public class JSONSorter {
private static final ObjectMapper mapper = new ObjectMapper();
public static void main(String[] args) throws IOException {
String jsonStr = "{...}"; // Your JSON string here
JsonNode json = mapper.readTree(jsonStr);
JsonNode sortedJson = sortJson(json);
String anotherGraphStr = "{...}"; // Another graph to compare
JsonNode anotherGraph = mapper.readTree(anotherGraphStr);
boolean areGraphsEqual = sortedJson.equals(anotherGraph);
System.out.println("Graphs are equal: " + areGraphsEqual);
}
public static JsonNode sortJson(JsonNode jsonNode) {
if (jsonNode.isObject()) {
ObjectNode sortedObjectNode = mapper.createObjectNode();
List<Map.Entry<String, JsonNode>> fields = new ArrayList<>();
jsonNode.fields().forEachRemaining(fields::add);
fields.sort(Map.Entry.comparingByKey());
for (Map.Entry<String, JsonNode> field : fields) {
sortedObjectNode.set(field.getKey(), sortJson(field.getValue()));
}
return sortedObjectNode;
} else if (jsonNode.isArray()) {
List<JsonNode> nodeList = new ArrayList<>();
jsonNode.forEach(nodeList::add);
nodeList.sort((a, b) -> {
// Example sorting by a unique field "id" if present
if (a.isObject() && b.isObject()) {
JsonNode aField = a.get("id");
JsonNode bField = b.get("id");
if (aField != null && bField != null) {
return aField.asText().compareTo(bField.asText());
}
}
return a.toString().compareTo(b.toString());
});
ArrayNode sortedArrayNode = mapper.createArrayNode();
for (JsonNode node : nodeList) {
sortedArrayNode.add(sortJson(node));
}
return sortedArrayNode;
} else {
return jsonNode;
}
}
}