JSONはデータを格納する入れ物として人気がある。
あらゆるプログラム言語で取り扱うことができるし、もちろんPythonでも可能だ。
今日はPythonでJSONをパースする方法をご紹介する。
目次
JSONのパース
jsonはビルトインパッケージなので、何もインストールせずともimportできる。
import json
扱うjsonデータは何でも良いが、せっかくなので以下のような入れ子構造(ネスト)になっているデータにする。
下記のデータは、jsonのなかにjsonがあり、さらにその中に、、というように4重の構造になっている。
json_string = """{ "menu": { "id": "file", "value": "File", "popup": { "menuitem": [ {"value": "New", "onclick": "CreateNewDoc()"}, {"value": "Open", "onclick": "OpenDoc()"}, {"value": "Close", "onclick": "CloseDoc()"} ] } } } """
以上のstring型のデータを`json.loads`を使うと辞書に変換できる。
# jsonをパースし、dictに変換 d = json.loads(json_string)
`type`関数で型を見ると、’dict’になっていることがわかる。
# <class 'dict'> print(type(d))
さて、ここからデータをパースする作業に入る。最初の辞書のキーを指定することで中身を取得できる。
# 辞書から値を取り出す menu = d["menu"]
さらにその中のキーを指定することで、値を取得できる。
# 出力は file print(menu["id"]) # 出力は File print(menu["value"])
“popup”というキーの中にjsonオブジェクトを抱え込んでいるので、その中身を取り出してみよう。
# popupの中身を取り出す popup = menu["popup"] # menuitemの中身を取り出す menuitem = popup["menuitem"]
“menuitem”のなかには、リストが入っている。リストの場合、Pythonで中身を出力するには以下のように書く。
# menuitemはリストになっているので、以下のように出力できる for m in menuitem: print(m)
以下のようにリストに入っている中身(これまたjsonのオブジェクト)が3つ取得できた。
{'value': 'New', 'onclick': 'CreateNewDoc()'} {'value': 'Open', 'onclick': 'OpenDoc()'} {'value': 'Close', 'onclick': 'CloseDoc()'}
あと一歩で、全てのjsonの値を取得できるところまできた。
3つのリストのうち1つを指定するには、[0][1][2]のようにする。添字は0から始まるので注意。
# リストを指定するには[0]のように指定する print(menuitem[0])
そのあとに続けて、キーを指定する。
# 出力は New print(menuitem[0]["value"])
これで、最後の値を取得できた。
おわり。
参考
Medium,
https://medium.com/@durgaswaroop/json-parsing-with-python-15a41c6fe03a