2016-11-06 3 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"] 

私はそれぞれのlibバージョンの詳細情報を得るかが、これは私が欲しいものを正確ではありません。次のように現在、私は解決策を持っています。 私はコードにハードコードされたlibの名前を提供したくありません。それはのようなものでなければなりません:

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

と私は独立して存在したバージョンと一緒にLIBの名前を取得します。だから、私がlibの名前を提供せず、より一般的なものにするこの種の解決策をどうすれば達成できるのかを提案してください。

+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

dictを反復すると、どのメソッドも使用しなくてもキーが生成されます。 –

+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 
関連する問題