如何从此 JSON 文件中提取所有密钥?

How do I extract all keys from this JSON file?

我正在使用的数据是游戏王卡片的完整列表,可在该端点找到:https://db.ygoprodeck.com/api/v7/cardinfo.php

有一个顶级 data 节点我可以忽略,但紧随其后的每个子节点(012、.. .) 是卡组中的一张独特卡牌。我想找出整个数据集中有多少个唯一键。棘手的部分是每张卡片可能有不同的子节点。最终我想把这一切都放入 SQL 表中,但现在我需要知道所有的键。键的一些示例是 idnamearchetypeatkdefcard_sets。如何提取所有键的唯一列表?我正在寻找获取此列表的最简单方法。我有使用 Python 和 T-SQL 的经验,但任何其他语言都可以,因为我的目标只是查看列表。

我用生成器解决了这个问题
如果数据是字典,它的键将是 yield
如果数据是列表或元组,它的元素继续被解析
字符串也是可迭代的,需要排除

import json
import requests
from collections import Iterable


def get_key(data):
    if isinstance(data, dict):
        for k, v in data.items():
            yield k
            yield from get_key(v)
    elif isinstance(data, Iterable) and not isinstance(data, str):
        for i in data:
            yield from get_key(i)


def main():
    url = "https://db.ygoprodeck.com/api/v7/cardinfo.php"
    res = requests.get(url)
    data = json.loads(res.text)["data"]
    result = set(get_key(data))
    print(result)


if __name__ == '__main__':
    main()

和输出

{'set_rarity', 'def', 'image_url_small', 'ban_tcg', 'set_rarity_code', 'linkmarkers', 'type', 'coolstuffinc_price', 'cardmarket_price', 'id', 'image_url', 'level', 'name', 'set_code', 'banlist_info', 'desc', 'set_name', 'card_prices', 'attribute', 'linkval', 'ebay_price', 'tcgplayer_price', 'card_sets', 'atk', 'set_price', 'ban_ocg', 'ban_goat', 'archetype', 'amazon_price', 'scale', 'race', 'card_images'}