Skip to content
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;
    }
}

}

Clone this wiki locally