Pythonはデータ分析やウェブ開発など、様々な場面で利用されています。特に、JSON形式のデータを扱う際にはその強力な機能が発揮されます。今回は、Pythonを使用してJSONの入れ子構造から特定のデータを抽出する方法について解説します。
JSONとは
JSON (JavaScript Object Notation) は、データ交換のための軽量なデータ形式です。人間にとって読み書きが容易で、マシンにとっても簡単にパースや生成を行うことができます。JSONはプロパティ-値のペア(他の言語ではオブジェクト、レコード、構造体、ディクショナリ、ハッシュテーブル、キー付きリスト、または連想配列として知られています)または値の順序付けられたリスト(他の言語では配列、ベクター、リスト、またはシーケンスとして知られています)を表現します。
PythonでのJSONの扱い方
Python標準ライブラリには json
モジュールが含まれており、これを使用することでJSON形式のデータの読み書きを行うことができます。具体的には、json.loads()
関数を使用してJSON形式の文字列をPythonのデータ型に変換したり、json.dumps()
関数を使用してPythonのデータ型をJSON形式の文字列に変換したりします。
入れ子構造のJSONデータから特定のデータを抽出する
入れ子になったJSONデータから特定のデータを抽出するには、再帰的な探索を行うことが一般的です。以下に具体的なコードを示します。
import json
def search(arg, cond):
res = []
if cond(arg):
res.append(arg)
if isinstance(arg, list):
for item in arg:
res += search(item, cond)
elif isinstance(arg, dict):
for value in arg.values():
res += search(value, cond)
return res
def has_star_key(arg):
if isinstance(arg, dict):
return arg.keys() == {"Deneb", "Altair", "Vega"}
def get_star(arg):
return search(arg, has_star_key)
if __name__ == "__main__":
with open('test.json', encoding='utf-8') as f:
data = json.load(f)
print(get_star(data)) # [{"Deneb": "デネブ", "Altair": "アルタイル", "Vega": "ベガ"}]
このコードでは、search
関数がJSONデータを再帰的に探索し、cond
関数がTrueを返すデータを抽出しています。has_star_key
関数は、データが辞書型であり、そのキーが “Deneb”, “Altair”, “Vega” の3つであるかどうかを判定しています。
以上がPythonを使用してJSONの入れ子構造から特定のデータを抽出する方法になります。この方法を覚えておくと、複雑なJSONデータを扱う際に役立つでしょう。