【Python】複数のキーやサブキーを持つJSONファイルをループ処理する方法
Pythonでは、標準ライブラリのjsonモジュールを使うことで、JSONファイルを簡単に解析できます。このモジュールはJSONを読み込んでPythonの辞書(dict)に変換してくれるため、あとは通常の辞書と同じように値を取り出すことができます。
例えば、次のような内容のJSONファイルがあるとします。
{
"id": "file",
"value": "File",
"popup": {
"menuitem": [
{"value": "New", "onclick": "CreateNewDoc()"},
{"value": "Open", "onclick": "OpenDoc()"},
{"value": "Close", "onclick": "CloseDoc()"}
]
}
}
JSONファイルを読み込む
まず、json.load()を使ってファイルからデータを読み込みます。with文を使えば、ファイルを自動的に閉じられるのでより安全です。
import json
with open('data.json') as f:
data = json.load(f)
キーと値をループで取得する
読み込んだdataは通常の辞書として扱えるため、items()メソッドを使えばキーと値を順番に取り出せます。
# dataは通常のdictとして利用可能
for k, v in data.items():
print("Key: " + k)
print("Value: " + str(v))
実行結果
このコードを実行すると、次のような出力が得られます。
Key: id
Value: file
Key: value
Value: File
Key: popup
Value: {'menuitem': [{'value': 'New', 'onclick': 'CreateNewDoc()'}, {'value': 'Open', 'onclick': 'OpenDoc()'}, {'value': 'Close', 'onclick': 'CloseDoc()'}]}
ネストされたサブキーを走査するには
上記の出力を見ると、popupの中身はそのまま文字列として表示され、内部のサブキーまでは辿れていません。ネストされた辞書やリストのすべての要素を走査したい場合は、木構造の辞書を再帰的にたどる再帰関数を定義すると便利です。
def iter_nested(data):
if isinstance(data, dict):
for k, v in data.items():
print("Key:", k)
iter_nested(v)
elif isinstance(data, list):
for item in data:
iter_nested(item)
else:
print("Value:", data)
iter_nested(data)
このように再帰処理を組み合わせれば、どれほど深くネストされたJSONでも、すべてのキーと値を漏れなく取得できます。APIレスポンスや設定ファイルなど、階層構造を持つJSONを扱う際にぜひ活用してください。
-
Pythonで複数の区切り文字を使って文字列を分割する方法
re.split()メソッドによる複数区切り文字での分割Pythonでは、標準ライブラリのreモジュールが提供するre.split(区切り文字, 文字列)メソッドを使うことで、複数の区切り文字を指定して文字列を簡単に分割できます。このメソッドには、区切り文字を表す正規表現パターンと、分割したい文字列を渡します。基本的な使い方次の例では、セミコロン(;)、カンマ(,)、アスタリスク(*)、改行(\n)という4種類の区切り文字を、1つの正規表現でまとめて処理しています。a = Beautiful, is; better*than\nugly import re print(re.split(; |
-
PythonでJSONファイルを見やすく整形表示(プリティプリント)する方法
Pythonは、他の多くのプログラミング言語と同様に、JavaScript Object Notation(JSON)データをスムーズに扱うことができます。さまざまなソースからJSONデータを取り込み、他のファイルと同じように操作できるため、JSONファイルを読みやすい形で整形表示(プリティプリント)したい場合に非常に便利です。 この記事では、PythonでJSONファイルをプリティプリントする2つの方法をご紹介します。どちらの方法もターミナルとコマンドラインを使用しますが、そのうち1つはPythonの知識がまったく不要です。 プリティプリントとは?(JSONファイルで使う理由) 簡単に言え