2017-02-22 3 views
-1

Ich habe diese Art von JSON-Struktur für Ordnerstruktur. Gibt es eine Möglichkeit, es mit der gleichen Art von Json-Baum zu vergleichen, um Unterschiede zu erhalten (Datei fehlt oder andere Dateieigenschaften (date, crc, ..)) und diese als Liste mit Namen verschiedener/fehlender Dateien zurückgibt.Vergleichen von zwei JSON-Baum in Python

{ 
     "testfolder": { 
     "children": { 
      "content.json": { 
      "last_modified_timestamp": 1485902084.0222416, 
      "created_timestamp": 1485193414.5027652, 
      "crc": "7c71cf7ff765ddd78fffcac2eed56ae2", 
      "type": "file", 
      "size": 961 
      }, 
      "config.json": { 
      "last_modified_timestamp": 1484831126.4821935, 
      "created_timestamp": 1484830625.6165457, 
      "crc": "bff5d42e18df483841aa10df8b38cdd4", 
      "type": "file", 
      "size": 132 
      } 
     } 
     }, 
     "__init__.py": { 
     "last_modified_timestamp": 1481651800.7150106, 
     "created_timestamp": 1481651800.7150106, 
     "crc": "d41d8cd98f00b204e9800998ecf8427e", 
     "type": "file", 
     "size": 0 
     }, 
     "test.json": { 
     "last_modified_timestamp": 1486126931.2528062, 
     "created_timestamp": 1486126732.7074502, 
     "crc": "8a30d9b3834ef46ad3b996edb06c72bf", 
     "type": "file", 
     "size": 1675 
     }, 
     "test": { 
     "children": { 
      "test.txt.txt": { 
      "last_modified_timestamp": 1486126927.9266162, 
      "created_timestamp": 1486126865.9750726, 
      "crc": "b5301fdbf2ba41520b255a651c7017b1", 
      "type": "file", 
      "size": 5 
      } 
     } 
     } 
    } 

Vielen Dank für Ihre Hilfe!

+0

Also, was haben Sie versucht, so weit? –

+1

laden Sie beide in Wörterbücher und dann die zahlreichen Antworten auf den Vergleich dicts, wie diese: http://stackoverflow.com/questions/4527942/comparing-two-dictionaries-in-python –

+0

Ich habe versucht mit Rekursion, die Liste von zurückgibt Dateien mit vollen Pfaden und als nur Unterschied zwischen zwei Listen, aber das löste nur fehlende Dateien nicht verschiedene Dateien. – Slajc

Antwort

0
def jsondiff(local,online,path='',todo=[]): 
    for key in local.keys(): 
     if not online.has_key(key): 
      if local[key].has_key('children'): 
       todo = todo + json_path_print(local[key]["children"],path+key+"/") 
      else: 
       todo.append(path+key) 
     else: 
      if local[key].has_key('children'): 
       todo=todo+jsondiff(local[key]["children"],online[key]["children"],path+key+"/") 
      else: 
       if local[key]["last_modified_timestamp"]>online[key]["last_modified_timestamp"]: 
        todo.append(path + key) 
    return todo 

es wurde gelöst, wenn jemand Lösung benötigen