バージョン管理された人

subversionで管理されてます

JSONのwalk

JSONファイルがいくつかあって、それらはスキーマは違っても取得したいキー名は固定であるなんてことがあるかもしれない。 そのときにJSONファイルのスキーマの違いを無視して特定キー名のプロパティを取得するようなことをしたいときに次のようなコード(Python)を利用すれば取得できる。

import json

def walk_json(key, jo):
    # 配列が来た場合はその配列の各要素の中身を探る
    if type(jo) is list:
        return sum(
            list(
                map(walk_json, jo)
            )
        )

    # JSONは `true` のみでも立派にJSONとして成り立ってしまうので、
    # `jo` がオブジェクト出ない場合は探したいキー名をプロパティには
    # 持っていない(そもそもプロパティを持ってない)のだから空リストを返す
    if type(jo) is not dict:
        return []

    # ここまで来るとJSONオブジェクトしかここにきていないはず
    if key in jo:
        # JSONオブジェクト内に欲しいキーがあればそれを返す
        return [jo[key]]
    # JSONオブジェクト内に欲しいキーがなればプロパティの中をさらに探索
    return sum(
        map(
            walk_json,
            filter(
                # JSONオブジェクトか配列以外はキーをプロパティに持つようなことはないため、
                # 探索する必要はない
                lambda jo: type(jo) is dict or type(jo) list,
                jo.values()
            ),
            []
        )