PythonでJSONをパースする方法

 

JSONはデータを格納する入れ物として人気がある。

 

あらゆるプログラム言語で取り扱うことができるし、もちろんPythonでも可能だ。

 

今日はPythonでJSONをパースする方法をご紹介する。

 

[toc]

 

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

ABOUTこの記事をかいた人

個人アプリ開発者。Python、Swift、Unityのことを発信します。月間2.5万PVブログ運営。 Twitter:@yamagablog