2012-06-21 74 views
12

Cómo comparar 2 objetos json en python a continuación son la muestra json.cómo comparar 2 json en python

sample_json1={ 
    { 
     "globalControlId": 72, 
     "value": 0, 
     "controlId": 2 
    }, 
    { 
     "globalControlId": 77, 
     "value": 3, 
     "controlId": 7 
    } 
} 

sample_json2={ 
    { 
     "globalControlId": 72, 
     "value": 0, 
     "controlId": 2 
    }, 
    { 
     "globalControlId": 77, 
     "value": 3, 
     "controlId": 7 
    } 
} 
+0

¿Puede explicar por qué 'if sample_json1 == sample_json2:' no sería suficiente ??? – Aprillion

+2

Las muestras "json" que ha escrito no son válidas. Tiene que darnos más código de contexto/trabajo si necesita ayuda. – Wilduck

Respuesta

3

estos no son válidos objetos JSON/Python, porque matriz/lista de literales están en el interior [] en lugar de {}:

ACTUALIZACIÓN: a la lista de diccionarios comparar (matriz serializada JSON de objetos), mientras haciendo caso omiso de la orden de los elementos de la lista, las listas deben tener ordenados o se convierten en conjuntos:

sample_json1=[{"globalControlId": 72, "value": 0, "controlId": 2}, 
       {"globalControlId": 77, "value": 3, "controlId": 7}] 
sample_json2=[{"globalControlId": 77, "value": 3, "controlId": 7}, 
       {"globalControlId": 77, "value": 3, "controlId": 7}, # duplicity 
       {"globalControlId": 72, "value": 0, "controlId": 2}] 

# dictionaries are unhashable, let's convert to strings for sorting 
sorted_1 = sorted([repr(x) for x in sample_json1]) 
sorted_2 = sorted([repr(x) for x in sample_json2]) 
print(sorted_1 == sorted_2) 

# in case the dictionaries are all unique or you don't care about duplicities, 
# sets should be faster than sorting 
set_1 = set(repr(x) for x in sample_json1) 
set_2 = set(repr(x) for x in sample_json2) 
print(set_1 == set_2) 
+0

este no funcionará si la orden cambia ejemplo para el ejemplo a continuación se produce un error – santosh

+0

sample_json1 = [{ "globalControlId": 72, "valor": 0, "ControlID": 2}, { "globalControlId": 77, "valor": 3, "ControlID": 7}] sample_json2 = [ { "globalControlId": 77, "valor": 3, "ControlID": 7}, { "globalControlId": 72, "valor": 0, "controlId": 2}] – santosh

+0

comparación debe ser exitosa incluso si la orden cambia por favor ayúdenme aquí – santosh

11

Parece que la comparación habitual funciona correctamente

import json 
x = json.loads("""[ 
    { 
     "globalControlId": 72, 
     "value": 0, 
     "controlId": 2 
    }, 
    { 
     "globalControlId": 77, 
     "value": 3, 
     "controlId": 7 
    } 
]""") 

y = json.loads("""[{"value": 0, "globalControlId": 72,"controlId": 2}, {"globalControlId": 77, "value": 3, "controlId": 7 }]""") 

x == y # result: True  
+0

que ayudó gracias :) – ashim888

Cuestiones relacionadas