2016-11-06 2 views
1

Ich habe eine JSON-Datei wie folgt:Wie liest man die JSON-Datei mit Python generischer?

{ 
    "Alib": { 
      "depends": null, 
      "locked": false, 
      "stage": "xyz", 
      "version": "1.2.3" 
     } 
    "Blib": { 
      "depends": null, 
      "locked": false, 
      "stage": "abc", 
      "version": "4.3.8" 
     } 
    "clib": { 
      "depends": null, 
      "locked": false, 
      "stage": "def", 
      "version": "5.2.6" 
     } 
    } 

Jetzt möchte ich diese JSON-Datei in einer Art und Weise lesen, dass ich den lib Namen und die Version in Bezug auf diese lib bekommen. Zur Zeit habe ich Lösung wie folgt:

with open (jsonfile) as data_file: 
       file = json.load(data_file) 
      print file["alib"]["version"] 
      print file["blib"]["version"] 
      print file["clib"]["version"] 

ich tun, um die Details der einzelnen lib Version bekommen, aber das ist nicht genau das, was ich will. Ich möchte nicht den Namen der lib hardcoded in den Code eingeben. Es sollte so etwas wie sein:

with open (jsonfile) as data_file: 
       file = json.load(data_file) 
     print file[lib]["version"] 

und ich bekomme die Namen der Lib zusammen mit ihren Versionen unabhängig voneinander. Also, bitte schlagen Sie vor, wie soll ich diese Art von Lösung erreichen, wo ich die Namen der Bibliotheken nicht zur Verfügung stelle und generischer mache.

+0

Sie json Probe nicht gültig ist: Nach jedem lib-Attribut fehlt ein Komma. –

+0

Sie sollten vermeiden, 'Datei' als eine Variable zu verwenden, weil es eine eingebaute Funktion ist (ein Alias ​​von' open'). Verwenden Sie zum Beispiel stattdessen "json_obj". –

Antwort

0

Die .keys() Funktion sollte sich als nützlich erweisen.

with open (jsonfile) as data_file: 
    file = json.load(data_file) 
    for key in file.keys(): 
     print file[key]["version"] 

Siehe verwandte Fragen wie python JSON only get keys in first level für weitere Details.

+0

Iterieren über ein Diktat ergibt seine Schlüssel ohne eine Methode zu verwenden. –

+0

Danke, das habe ich komplett vergessen! – wwl

2

Sobald Ihr JSON in der Variablen "Datei" gespeichert ist, können Sie es durchlaufen, um jedes Element zu drucken.

for lib in file: 
    print lib, file[lib]["version"] 
1

Ihre JSON-Datei wird als dict geladen. Jeder Schlüssel ist ein Bibliotheksname, Werte sind dict:

import json 
import io 

content = '''\ 
{ 
    "Alib": { 
      "depends": null, 
      "locked": false, 
      "stage": "xyz", 
      "version": "1.2.3" 
     }, 
    "Blib": { 
      "depends": null, 
      "locked": false, 
      "stage": "abc", 
      "version": "4.3.8" 
     }, 
    "clib": { 
      "depends": null, 
      "locked": false, 
      "stage": "def", 
      "version": "5.2.6" 
     } 
}''' 

fp = io.BytesIO(content) # can be a real file 
json_obj = json.load(fp) 

Sie können die Bibliotheken-Versionen wie folgt angezeigt:

for lib, attrs in json_obj.items(): 
    print(u"{lib}: version={version}".format(lib=lib, version=attrs["version"])) 

Sie erhalten:

Alib: version=1.2.3 
Blib: version=4.3.8 
clib: version=5.2.6 
Verwandte Themen