Database JUNKY

MySQL,MariaDBを中心としたブログです

python3 json.loadsでjsonを読み込み、for ループで特定の要素を抜き出すサンプル

通常でよく使いそうなので、python3でのjsonの読み込み、取得したjsonをforループ処理にて、一部の要素の参照するという、まぜまぜのサンプルを作って見ました。

サンプルでは、このあたりを中心に書いてますー

辞書型変数の参照( for xx in yy:) 、 json.loads および urllib.request 

f:id:hit10231023:20180302202040p:plain

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

きっと、、おそらく、、こういうのよく使う(使わないか。。)と思いますので参考にどうぞ!!