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データを扱う際に役立つでしょう。

投稿者 admin

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です