2016-11-06 42 views
1

我有一個JSON文件,如下所示:如何使用python以更一般的方式讀取json文件?

{ 
    "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" 
     } 
    } 

現在我想的方式,我得到的lib姓名和相對於該LIB版本讀取此JSON文件。目前,我有解決方案如下:

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

我得到的每一個庫版本的細節,但是這不正是我想要的。 我不想提供代碼硬編碼的名稱。它應該是這樣的:

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

和我得到的lib名稱與獨立的版本。因此,請建議如何實現這種解決方案,我不提供libs的名稱並使其更通用。

+0

您JSON樣品是無效的:每個lib屬性後都會缺少逗號。 –

+0

你應該避免使用'file'作爲變量,因爲它是一個內置函數('open'的別名)。例如,使用'json_obj'來代替。 –

回答

0

.keys()功能應該派上用場。

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

查看相關問題,如python JSON only get keys in first level瞭解更多詳情。

+0

迭代字典時不需要使用任何方法就可以得到密鑰。 –

+0

謝謝,我完全忘了! – wwl

2

一旦你的json被存儲到變量「file」中,你可以遍歷它來打印每個元素。

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

您將json文件加載爲dict。每個密鑰庫名,值是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) 

您可以顯示庫的版本是這樣的:

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

你得到:

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