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