python3 json.loadsでjsonを読み込み、for ループで特定の要素を抜き出すサンプル
通常でよく使いそうなので、python3でのjsonの読み込み、取得したjsonをforループ処理にて、一部の要素の参照するという、まぜまぜのサンプルを作って見ました。
サンプルでは、このあたりを中心に書いてますー
辞書型変数の参照( for xx in yy:) 、 json.loads および urllib.request
apiの戻り値からJSONをパースする!!
ちょっと効率悪いやり方かどうかもわかっていないですが、 python3でこんなコードをサンプルを書いてみました
cat jsonread.py ------------------------------- import json import urllib.request def main(): try: url = 'http://localhost:5000/newlists' res = urllib.request.urlopen(url) data = json.loads(res.read().decode('utf-8')) # 実行結果(json)をdata変数に格納 except urllib.error.HTTPError as e: print('HTTPError: ', e) except json.JSONDecodeError as e: print('JSONDecodeError: ', e) for key in data['images']: print(key['title']) # titleのみ参照 if __name__ == '__main__': main()
ポイント
いくつかポイントを書きます
json.loads(res.read().decode('utf-8')) # 実行結果
json.loadsです。json.loadではなくて、json.loadsです。これは、JSON形式のファイルを、pythonでの辞書型に変更するって意味があるそうです。
コードを書いてて、超はまったのがこれ(汗)
for key in data['images']: print(key['title']) # titleのみ参照
data辞書の中のimagesキーの中にある、titleをfor loopで回して出力するって感じです
えと、厳密な単語は説明できないのですが、下記サンプル jsonで、 status , images ってのが、JSONでのKEY だと思うんですね。この中で、statusは今回不要で、imagesの中の、titleのみを参照したかったので、上のような書き方になりました。はじめ、ほんっとに、forループでのでの部分参照がわからなくて悩んでました。結果上の書き方で結果が帰ってきたので、よしとします
戻り値のJSONについて
http://localhost:5000/lists を叩いた結果がこんなJSONだったと仮定します
{ "status": "OK", "images": [ { "Url": "https://site1.testsite.com/images-us/images/aaa.jpg", "Name": "THE BOYZ", "domain": "site1.testsite.com", "id": 687813882699529, "title": "Just U", "viewid": 687813882699529 }, { "Url": "https://site2.testsite.com/images-us/images/bbb.jpg", "Name": "Stray Kids", "domain": "site2.testsite.com", "id": 488388864388586, "title": "3rd Eye", "viewid": 488388864388586 } ] }
実行結果
こちらが実行結果になります。パチパチ
$ python3 jsonread.py ------ Just U 3rd Eye
きっと、、おそらく、、こういうのよく使う(使わないか。。)と思いますので参考にどうぞ!!