Pythonの基礎 ファイル (JSON) 読み込み編 その2
Pythonの基礎 JSONの読み込み編2
読み込んだJSONから情報を得る
前回までで、JSONの読み込みはできるようになりました。 インデントをつけて、ソートして表示までできますから、かなり見やすいところまでは来ています。 しかし、これがWebAPIからの膨大な量だとすると、、、、、もう少し整形して使いやすいようにしておきたいですね。 自分が必要とする情報だけを取り出したり、任意の順番で表示させたりと、色々なことが考えられます。
Dictionaryになっているので、ルールを考えて取り出せばよい
キーと値の組み合わせを考えて、必要なところだけを取り出しましょう。
今回は、group1とgroup2から値が50以上のキーと値だけを取り出してみます。
jsonData.jsonは こんな感じのjsonです { "group1": { "Adam": 40, "Bob": 74, "Chris": 60, "David": 71 }, "group2": { "Eric": 44, "John": 44, "Mike": 99, "ken": 33 } }
やり方
"group"のキーに対する値ごとにDictionaryとして読み込み、そこから値をチェックするだけですね。
ではサンプルコード。 今回も初心者向け、って感じです。
#coding:utf-8 import json f = open('jsonData2.json', 'r') jsonData = json.load(f) #jsonの中身を確かめたいときは、このコメントを外せばよい #print json.dumps(jsonData, sort_keys = True, indent = 4) #ここでキーをリスト化する。ここではもちろんgroupのこと。 keyList = jsonData.keys() #キーでソートする。 keyList.sort() for k in keyList: print "[", k,"]" groupDict = jsonData[k] #取得しgroupDictが見たければ下のコメントを外す #print groupDict #ここでgroupListのキーを取得してnameListとする nameList = groupDict.keys() #これでキーである名前を並べ替えることができた nameDict.sort() #nameListをforでひとつずつチェックして、値を判定する for name in nameList: #print name #あとは判定するだけ if groupDict[name] >= 50: print "%s's value is %d" % (name, groupDict[name]) f.close()
結果は以下
#実行結果 [ group1 ] Bob's value is 74 Chris's value is 60 David's value is 71 [ group2 ] Mike's value is 99
値が50以上のキーと値そのものを表示させることができました。 簡単ですが、コードを見てみましょう。
jsonデータをファイルから読み込んでから
"group"部分のキーを取得してソートする
簡単ですね。このデータではgroupデータは二つだけなので拍子抜けかもしれませんが (^_^;A、キーをソートすることができます。
#ここでキーをリスト化する。ここではもちろんgroupのこと。 keyList = jsonData.keys() #キーでソートする。 keyList.sort()
groupキーで値をリスト化する
すでに取得したgroupキーを使い、対応する値をgroupDictとして取得します。 このとき、値も辞書型になっていますから、まだこのままでは使えません。 groupDictからキーである名前を取り出してソートします。 for文の前にやったことと同じですね。
for k in keyList: print "[", k,"]" groupDict = jsonData[k] #取得しgroupDictが見たければ下のコメントを外す #print groupDict #ここでgroupDictのキーを取得してnameListとする nameList = groupDict.keys() #これでキーである名前を並べ替えることができた nameList.sort()
名前をキーとして値をチェックする
あとは簡単ですね。 groupDictに対し、nameListで値を取り出し、判定し、表示させます。
#nameListをforでひとつずつチェックして、値を判定する for name in nameList: #print name #あとは判定するだけ if groupDict[name] >= 50: print "%s's value is %d" % (name, groupDict[name])
今回は少ないデータで分かりやすかったと思います。 これがもっと複雑なjsonになったとしても、リストや辞書を使って効率的にデータを取り出すことができればいいですね。
- 作者: Mark Lutz,夏目大
- 出版社/メーカー: オライリージャパン
- 発売日: 2009/02/26
- メディア: 大型本
- 購入: 12人 クリック: 423回
- この商品を含むブログ (124件) を見る