0Pricing
Python Academy · レッスン

入れ子になった JSON 構造の処理

複雑な入れ子構造の JSON オブジェクトをたどり、変換します。

「入れ子になった JSON 構造の処理」はCoddyKit上の無料Python Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはPython Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Python Academyコースには全4レッスンが含まれています。

概要

現実のJSONは深くネストされています。ネストされた構造をたどり、変換し、検証する方法を知ることは不可欠です。

ネストされたキーへのアクセス

data['user']['address']['city']でネストされたdictをたどれます。キーがない場合に対応するには、各レベルで.get()を使います。
import json
data = {'user': {'address': {'city': 'NYC', 'zip': '10001'}}}
print(data['user']['address']['city'])

安全なネストアクセス

data.get('user', {}).get('address', {}).get('city')のように.get()を連鎖させると、安全にアクセスできます。
data = {'user': {'name': 'Alice'}}
city = data.get('user', {}).get('address', {}).get('city', 'unknown')
print(city)

オブジェクト配列の反復処理

JSONのオブジェクト配列は、dictのリストです。forループで反復処理します。
import json
data = json.loads('[{"name":"Alice"},{"name":"Bob"}]')
for user in data:
    print(user['name'])

ネストされたJSONのフラット化

再帰関数を作成し、ネストされたdictをドット区切りのキーを持つフラットなdictに変換します。
def flatten(d, prefix=''):
    result = {}
    for k, v in d.items():
        key = f'{prefix}.{k}' if prefix else k
        if isinstance(v, dict):
            result.update(flatten(v, key))
        else:
            result[key] = v
    return result
print(flatten({'a': {'b': {'c': 1}}, 'd': 2}))

配列のフィルタリング

[user for user in data if user.get('active')]は、条件に基づいてJSON配列をフィルタリングします。
data = [{'name':'A','active':True},{'name':'B','active':False}]
active = [u for u in data if u.get('active')]
print(active)

ネストされたデータの変換

各ネストオブジェクトからフィールドを取り出します:[item['name'] for item in data]
data = [{'id': 1, 'name': 'Alice'}, {'id': 2, 'name': 'Bob'}]
names = [d['name'] for d in data]
print(names)

jsonschemaによるスキーマ検証

pip install jsonschemaを実行します。jsonschema.validate(instance, schema)は、データが無効な場合にValidationErrorを発生させます。
# from jsonschema import validate
# schema = {'type':'object','required':['name']}
# validate({'name':'Alice'}, schema)  # OK
# validate({}, schema)  # raises ValidationError
print('schema validation demo')

ネストされたdictのディープ更新

浅い更新を行うdict.update()では、ネストされたdictはマージされません。ネストされた構造をマージするには、再帰的なdeep_updateを作成します。
def deep_update(base, override):
    for k, v in override.items():
        if isinstance(v, dict) and isinstance(base.get(k), dict):
            deep_update(base[k], v)
        else:
            base[k] = v
    return base
result = deep_update({'a': {'x': 1}}, {'a': {'y': 2}})
print(result)

Pythonでのjqスタイルのクエリ

複雑なクエリには、jqライブラリまたはカスタム再帰検索を使用します: find_all(data, 'key')。
def find_all(obj, key):
    if isinstance(obj, dict):
        if key in obj: yield obj[key]
        for v in obj.values(): yield from find_all(v, key)
    elif isinstance(obj, list):
        for item in obj: yield from find_all(item, key)
data = {'a': {'name': 'x'}, 'b': [{'name': 'y'}]}
print(list(find_all(data, 'name')))

NDJSONへのシリアライズ

改行区切りJSON(NDJSON)は、1行に1つのJSONオブジェクトを記述します。json.dumps(obj) + '\n' で書き出します。
import json
objects = [{'id': 1}, {'id': 2}, {'id': 3}]
ndjson = '\n'.join(json.dumps(o) for o in objects)
print(ndjson)

クイックチェック

'key'が存在しない場合、data.get('key', {}).get('nested')は何を返しますか?

まとめ

ネストされたJSONでは、安全にアクセスするために .get() を連結します。配列はforで反復処理します。再帰で平坦化します。リスト内包表記でフィルタリングします。検証にはjsonschemaを使用します。

次へ進む

この調子で頑張りましょう!次のレッスンに進んでください。

よくある質問

「入れ子になった JSON 構造の処理」レッスンは無料ですか?

はい。「入れ子になった JSON 構造の処理」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Python Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Python Academyコースには全4レッスンが含まれています。

「入れ子になった JSON 構造の処理」で何を学びますか?

複雑な入れ子構造の JSON オブジェクトをたどり、変換します。 ブラウザで直接実行するハンズオンコードでPython Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Python Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのPython Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。

「入れ子になった JSON 構造の処理」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このPython Academyレッスンでコードを書いて実行できますか?

はい。すべてのPython Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. JSON のエンコードとデコード
  2. 入れ子になった JSON 構造の処理
  3. csv.reader による CSV の読み取り
  4. csv.DictWriter による CSV の書き込み
← Python Academyに戻る