Saltar al contenido

La mejor manera de comparar 2 archivos JSON en Java

Hacemos una verificación completa cada posts en nuestra página web con la meta de mostrarte en todo momento información con la mayor veracidad y actual.

Solución:

Recomiendo la biblioteca zjsonpatch, que presenta la información de diferencias de acuerdo con RFC 6902 (parche JSON). Puedes usarlo con Jackson:

JsonNode beforeNode = jacksonObjectMapper.readTree(beforeJsonString);
JsonNode afterNode = jacksonObjectMapper.readTree(afterJsonString);
JsonNode patch = JsonDiff.asJson(beforeNode, afterNode);
String diffs = patch.toString();

Esta biblioteca es mejor que fge-json-patch (que se mencionó en otra respuesta) porque puede detectar elementos que se insertan o eliminan de las matrices. Fge-json-patch no puede manejar eso (si un elemento se inserta en medio de un arraypensará que ese artículo y todos los artículos posteriores se cambiaron, ya que todos se cambiaron por uno).

Esto solo aborda la igualdad, no las diferencias.


Con Jackson.

ObjectMapper mapper = new ObjectMapper();

JsonNode tree1 = mapper.readTree(jsonInput1);
JsonNode tree2 = mapper.readTree(jsonInput2);

boolean areTheyEqual = tree1.equals(tree2);

Del JavaDoc para JsonNode.equals:

La igualdad para los objetos de nodo se define como una igualdad de valor completa (profunda). Esto significa que es posible comparar la igualdad de árboles JSON completos comparando la igualdad de los nodos raíz.

He tenido una buena experiencia con JSONAssert.

import org.junit.Test;
import org.apache.commons.io.FileUtils;
import org.skyscreamer.jsonassert.JSONAssert;
import org.skyscreamer.jsonassert.JSONCompareMode;

... 
@Test
public void myTest() 
  String expectedJson = FileUtils.readFileToString("/expectedFile");
  String actualJson = FileUtils.readFileToString("/actualFile");
  JSONAssert.assertEquals(expectedJson, actualJson, JSONCompareMode.STRICT);

... 

Si haces scroll puedes encontrar las notas de otros usuarios, tú de igual manera tienes el poder dejar el tuyo si te apetece.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *