¿Cómo comparar objetos JSON independientemente del orden en Python?

JSON es la notación de objetos de Java Script. Estos son códigos fuente independientes del idioma que se utilizan para el intercambio de datos y, por lo general, son de naturaleza ligera. Actúa como una alternativa a XML. Estos son generalmente textos que los humanos pueden leer y escribir fácilmente y también es más fácil para las máquinas analizar JSON y generar resultados. JSON se utiliza principalmente para la transmisión de datos entre el servidor y las aplicaciones web. .  

En este artículo, aprenderemos cómo podemos comparar objetos JSON independientemente del orden en que existen en Python.

Acercarse:

  • Módulo de importación
  • Crear strings JSON
  • Convertir strings a diccionarios de python
  • Ordenar diccionarios
  • Comparar
  • Imprimir resultado

Varias implementaciones para hacer lo mismo se dan a continuación,

Ejemplo 1: Usando sorted()

Python3

import json
  
# JSON string
json_1 = '{"Name":"GFG", "Class": "Website", "Domain":"CS/IT", "CEO":"Sandeep Jain"}'
  
json_2 = '{"CEO":"Sandeep Jain", "Domain":"CS/IT","Name": "GFG","Class": "Website"}'
  
# Converting string into Python dictionaries
json_dict1 = json.loads(json_1)
json_dict2 = json.loads(json_2)
  
print(sorted(json_dict1.items()) == sorted(json_dict2.items()))

Producción:

True

Ejemplo 2: comparación más compleja

Python3

import json
  
# JSON string
json_1 = '{"Name":"GFG", "Class": "Website", "Domain":"CS/IT", "CEO":"Sandeep Jain","Subjects":["DSA","Python","C++","Java"]}'
  
json_2 = '{"CEO":"Sandeep Jain","Subjects":["C++","Python","DSA","Java"], "Domain":"CS/IT","Name": "GFG","Class": "Website"}'
  
# Convert string into Python dictionary
json1_dict = json.loads(json_1)
json2_dict = json.loads(json_2)
  
print(sorted(json1_dict.items()) == sorted(json2_dict.items()))
  
print(sorted(json1_dict.items()))
print(sorted(json2_dict.items()))

Producción:

Falso

[(‘CEO’, ‘Sandeep Jain’), (‘Clase’, ‘Sitio web’), (‘Dominio’, ‘CS/IT’), (‘Nombre’, ‘GFG’), (‘Asuntos’, [ ‘DSA’, ‘Python’, ‘C++’, ‘Java’])]

[(‘CEO’, ‘Sandeep Jain’), (‘Clase’, ‘Sitio web’), (‘Dominio’, ‘CS/IT’), (‘Nombre’, ‘GFG’), (‘Asuntos’, [ ‘C++’, ‘Python’, ‘DSA’, ‘Java’])]

En este caso, obtenemos nuestro resultado como Falso porque el problema con el método ordenado() es que solo funciona en el nivel superior de un diccionario, es decir, en las claves y no en sus valores, como se puede verificar con el código anterior. Entonces, en tales casos, podemos definir una función personalizada nosotros mismos que puede ordenar recursivamente cualquier lista o diccionario (convirtiendo los diccionarios en una lista de pares clave-valor) y, por lo tanto, pueden adaptarse para la comparación. La implementación usando esta alternativa se da a continuación.

Ejemplo:

Python3

import json
  
# JSON string
json_1 = '{"Name":"GFG", "Class": "Website", "Domain":"CS/IT", "CEO":"Sandeep Jain","Subjects":["DSA","Python","C++","Java"]}'
  
json_2 = '{"CEO":"Sandeep Jain","Subjects":["C++","Python","DSA","Java"], "Domain":"CS/IT","Name": "GFG","Class": "Website"}'
  
# Convert string into Python dictionary
json1_dict = json.loads(json_1)
json2_dict = json.loads(json_2)
  
  
def sorting(item):
    if isinstance(item, dict):
        return sorted((key, sorting(values)) for key, values in item.items())
    if isinstance(item, list):
        return sorted(sorting(x) for x in item)
    else:
        return item
  
  
print(sorting(json1_dict) == sorting(json2_dict))

Producción:

True

Publicación traducida automáticamente

Artículo escrito por saurabh48782 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

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