2016-04-27 3 views
-2

Ich möchte zwei große JSON-Knoten in Java vergleichen, und wenn sie unterschiedlich sind, muss ich den Wert drucken, der in beiden Knoten unterschiedlich war. JsonNode.equals() gibt false zurück, wenn die Knoten ungleich sind, aber nicht den bestimmten eindeutigen Wert.zwei json-Knoten rekursiv vergleichen und den eindeutigen Wert in Java drucken

Danke.

Codebeispiel:

import org.codehaus.jackson.JsonNode; 
    import org.codehaus.jackson.map.ObjectMapper; 
    import org.codehaus.jackson.map.util.JSONPObject; 
    import org.json.JSONException; 
    import org.json.JSONObject; 
    import java.io.IOException; 
    import java.util.Iterator; 
    import java.util.Map; 


    public class TestJsonComp 
    { 
     static String json = "{\n" + 
      " \"d\" :\n" + 
      " {\n" + 
      " \"results\" :\n" + 
      " [\n" + 
      "  {\n" + 
      "  \"__metadata\" :\n" + 
      "  {\n" + 
      "   \"id\" :    \"   ##ServiceRoot##/Submit('##RequisitionUniqueName##')\",\n" + 
    "   \"uri\" : \"##ServiceRoot##/Submit('##RequisitionUniqueName##')\",\n" + 
    "   \"type\" : \".submitResponse\",\n" + 
    "   \"etag\" : \"W/\\\"##RequisitionUniqueName##\\\"\"\n" + 
    "  },\n" + 
    "  \"status\" : \"ERROR\",\n" + 
    "  \"uniqueName\" : \"##RequisitionUniqueName##\",\n" + 
    "  \"errors\" :\n" + 
    "  {\n" + 
    "   \"results\" :\n" + 
    "   [\n" + 
    "   {\n" + 
    "    \"__metadata\" :\n" + 
    "    {\n" + 
    "    \"id\" : \"##ServiceRoot##/RequisitionErrors(0)\",\n" + 
    "    \"uri\" : \"##ServiceRoot##/RequisitionErrors(0)\",\n" + 
    "    \"type\" : \".errors\",\n" + 
    "    \"etag\" : \"W/\\\"0\\\"\"\n" + 
    "    },\n" + 
    "    \"id\" : 0,\n" + 
    "    \"error_description\" : \"title.\"\n" + 
    "   },\n" + 
    "   {\n" + 
    "    \"__metadata\" :\n" + 
    "    {\n" + 
    "    \"id\" : \"##ServiceRoot##/RequisitionErrors(1)\",\n" + 
    "    \"uri\" : \"##ServiceRoot##/RequisitionErrors(1)\",\n" + 
    "    \"type\" : \".errors\",\n" + 
    "    \"etag\" : \"W/\\\"1\\\"\"\n" + 
    "    },\n" + 
    "    \"id\" : 1,\n" + 
    "    \"error_description\" : \"Line item 1 must be set.\"\n" + 
    "   }\n" + 
    "   ]\n" + 
    "  }\n" + 
    "  }\n" + 
    " ]\n" + 
    " }\n" + 
    "}"; 

     static String jsonCompare = "{\n" + 
    " \"d\" :\n" + 
    " {\n" + 
    " \"results\" :\n" + 
    " [\n" + 
    "  {\n" + 
    "  \"__metadata\" :\n" + 
    "  {\n" + 
    "   \"id\" : \"##ServiceRoot##/Submit('##RequisitionUniqueName##')\",\n" + 
    "   \"uri\" : \"##ServiceRoot##/Submit('##RequisitionUniqueName##')\",\n" + 
    "   \"type\" : \".submitResponse\",\n" + 
    "   \"etag\" : \"W/\\\"##RequisitionUniqueName##\\\"\"\n" + 
    "  },\n" + 
    "  \"status\" : \"ERROR\",\n" + 
    "  \"uniqueName\" : \"##RequisitionUniqueName##\",\n" + 
    "  \"errors\" :\n" + 
    "  {\n" + 
    "   \"results\" :\n" + 
    "   [\n" + 
    "   {\n" + 
    "    \"__metadata\" :\n" + 
    "    {\n" + 
    "    \"id\" : \"##ServiceRoot##/RequisitionErrors(0)\",\n" + 
    "    \"uri\" : \"##ServiceRoot##/RequisitionErrors(0)\",\n" + 
    "    \"type\" : \".errors\",\n" + 
    "    \"etag\" : \"W/\\\"0\\\"\"\n" + 
    "    },\n" + 
    "    \"id\" : 0,\n" + 
    "    \"error_description\" : \"title.\"\n" + 
    "   },\n" + 
    "   {\n" + 
    "    \"__metadata\" :\n" + 
    "    {\n" + 
    "    \"id\" : \"##ServiceRoot##/RequisitionErrors(1)\",\n" + 
    "    \"uri\" : \"##ServiceRoot##/RequisitionErrors(1)\",\n" + 
    "    \"type\" : \".errors\",\n" + 
    "    \"etag\" : \"W/\\\"1\\\"\"\n" + 
    "    },\n" + 
    "    \"id\" : 1,\n" + 
    "    \"error_descriptio\" : \"Line item 1 must be set.\"\n" + 
    "   }\n" + 
    "   ]\n" + 
    "  }\n" + 
    "  }\n" + 
    " ]\n" + 
    " }\n" + 
    "}"; 


     public static void main (String args []) throws IOException, JSONException 
     { 
      ObjectMapper objectMapper = new ObjectMapper(); 
      JsonNode n1 = objectMapper.readTree(json); 
      JsonNode n2 = objectMapper.readTree(jsonCompare); 
      System.out.print(n1.equals(n2)); 

     } 


    } 
+1

Zeigen Sie uns Ihren Code und Ihre Versuche, dies zusammen mit den JSON-Strukturen zu tun – Ricardo

Antwort

1

Ich würde vorschlagen, verwenden Sie einen Dateikomparator und vergleichen Sie Zeile für Zeile. Dies funktioniert, wenn Sie auch die Reihenfolge der Elemente im Knoten beachten. Wenn die Reihenfolge nicht berücksichtigt wird, verwenden Sie zuerst JsonNode.equals(), um die Gleichheit zu prüfen, und verwenden Sie Dateikomparator nur, wenn die Knoten ungleich sind, um die Unterschiede zu drucken.

Verwandte Themen