Python compara objetos JSON multinivel usando JSON Diff

Salman Mehmood 10 octubre 2023
  1. Comparar objetos JSON multinivel en Python
  2. Utilice el operador de igualdad para comparar objetos JSON multinivel en Python
  3. Use jsondiff para comparar objetos JSON multinivel en Python
Python compara objetos JSON multinivel usando JSON Diff

Este artículo tiene como objetivo demostrar cómo podemos comparar dos objetos JSON multinivel y determinar si son idénticos.

Comparar objetos JSON multinivel en Python

Abreviatura de Notación de objetos de JavaScript, los objetos JSON se utilizan principalmente para intercambiar datos y, en general, se consideran muy ligeros. Una de sus principales ventajas es que puede ser fácilmente entendido por humanos y máquinas, ya que se puede analizar fácilmente, lo que permite que el dispositivo extraiga información valiosa.

Debido a su uso frecuente, es posible que necesitemos comparar dos objetos por cualquier motivo. Puede ser para comprobar si sus contenidos son idénticos o para otro fin.

Considere el siguiente código:

obj1 = {
    "countries": [
        {
            "name": "Great Britian",
            "cities": [{"name": "Manchester"}, {"name": "London"}],
        }
    ]
}

obj2 = {"countries": [{"name": "Great Britian", "cities": [{"name": "London"}]}]}

El fragmento de código muestra que tenemos dos objetos JSON que almacenan información sobre países y sus ciudades. Una cosa interesante a tener en cuenta aquí es que tienen varios niveles, lo que significa que los objetos contienen más objetos JSON que están anidados dentro.

Utilice el operador de igualdad para comparar objetos JSON multinivel en Python

Antes de profundizar en bibliotecas de terceros, lo mejor es verificar si nuestra tarea es factible a través de las funciones estándar de Python. Afortunadamente para nosotros, la igualdad funciona igual de bien para nuestro caso de uso.

Aunque, si necesita más control sobre las variables, como filtrar datos o buscar cambios específicos, es posible que deba usar una biblioteca de terceros, ya que el operador de igualdad no brinda tanta flexibilidad como podría necesitar. Para casos más sencillos, usar el operador de igualdad es más que suficiente.

Considere el siguiente código:

obj1 = {
    "errors": [{"error": "err1", "fld": "mail"}, {"error": "err2", "fld": "name"}],
    "success": "false",
}

obj2 = {
    "errors": [{"error": "err1", "fld": "mail"}, {"error": "err2", "fld": "name"}],
    "success": "false",
}

obj3 = {
    "errors": [
        {"error": "err1", "fld": "mail"},
        {"error": "err2", "fld": "name"},
        {"error": "err3", "fld": "time"},
    ],
    "success": "false",
}

print(obj1 == obj2)
print(obj2 == obj3)

Producción :

True
False

A continuación, se puede ver que se declaran tres objetos JSON, de los cuales dos son iguales y uno es diferente. Usando el operador de igualdad, podemos determinar si son iguales.

Este enfoque es más accesible de implementar que cualquier biblioteca de terceros y ahorra la molestia de revisar la documentación de las bibliotecas. Por otro lado, no proporciona mucha funcionalidad, que, si es necesario, se puede lograr utilizando un módulo/biblioteca de terceros.

Use jsondiff para comparar objetos JSON multinivel en Python

jsondiff es un módulo de código abierto de terceros que se puede usar para diferenciar entre JSON y estructuras similares a JSON. Con esta biblioteca, puede ser bastante fácil encontrar diferencias entre los objetos JSON, ya sean de varios niveles o desordenados.

Antes de saltar para ver cómo podemos hacerlo, primero instalemos jsondiff, ya que es un módulo de terceros y no viene integrado con ninguna instalación estándar de Python.

Guía para instalar jsondiff

Abra el símbolo del sistema y ejecute el siguiente comando para comenzar a instalar jsondiff:

pip install jsondiff

Producción :

Collecting jsondiff
Downloading jsondiff-2.0.0-py3-none-any.whl (6.6 kB)
Installing collected packages: jsondiff
Successfully installed jsondiff-2.0.0

Después de instalar jsondiff, podemos comenzar a usarlo para realizar nuestra tarea.

Considere el siguiente código:

import jsondiff

obj1 = {
    "countries": [
        {
            "name": "Great Britian",
            "cities": [{"name": "Manchester"}, {"name": "London"}],
        }
    ]
}

obj2 = {
    "countries": [
        {
            "name": "Great Britian",
            "cities": [{"name": "Manchester"}, {"name": "London"}],
        }
    ]
}

res = jsondiff.diff(obj1, obj2)

if res:
    print("Diff found")
else:
    print("Same")

Producción :

Same

En el siguiente código, usamos la biblioteca de terceros jsondiff para encontrar si los dos objetos son iguales o no. Para ser más específicos, usamos la función jsondiff.diff(), pasando nuestros objetos JSON llamados obj1 y obj2.

El funcionamiento de jsondiff.diff es que si encuentra algún cambio, lo devuelve, que guardamos en una variable llamada res. Si hay alguna diferencia, podemos determinar rápidamente si los objetos comparados son idénticos o diferentes.

Salman Mehmood avatar Salman Mehmood avatar

Hello! I am Salman Bin Mehmood(Baum), a software developer and I help organizations, address complex problems. My expertise lies within back-end, data science and machine learning. I am a lifelong learner, currently working on metaverse, and enrolled in a course building an AI application with python. I love solving problems and developing bug-free software for people. I write content related to python and hot Technologies.

LinkedIn

Artículo relacionado - Python JSON