如何提取游戏王卡牌JSON数据集中的所有唯一键名?
最简实现方案
直接用Python处理,全程逻辑非常简单,利用集合自动去重的特性就能快速拿到结果,不需要复杂操作。
仅提取卡牌顶层键的版本
如果只需要每一张卡牌对象直接下属的不重复键(也就是你提到的id/name/atk这一级的键),直接跑下面的代码即可:
import requests # 拉取全量卡牌数据 res = requests.get("https://db.ygoprodeck.com/api/v7/cardinfo.php") all_cards = res.json()["data"] # 用集合存储键,自动完成去重 unique_keys = set() for card in all_cards: unique_keys.update(card.keys()) # 输出排序后的键列表,方便后续建表用 print(f"总计不重复顶层键数量:{len(unique_keys)}") print(sorted(unique_keys))
运行前如果没装requests库,先执行pip install requests安装即可,接口返回全量数据体积不大,整个脚本跑完只需要几秒。
提取所有层级嵌套键的版本
如果你还需要拿到嵌套结构里的键(比如card_sets数组里每个对象的键、card_images/card_prices这类子节点的键),加一个简单的递归遍历函数就行:
import requests def fetch_all_keys(target, key_store): if isinstance(target, dict): key_store.update(target.keys()) for val in target.values(): fetch_all_keys(val, key_store) elif isinstance(target, list): for item in target: fetch_all_keys(item, key_store) res = requests.get("https://db.ygoprodeck.com/api/v7/cardinfo.php") card_data = res.json()["data"] all_level_keys = set() fetch_all_keys(card_data, all_level_keys) print(sorted(all_level_keys))
提示:拿到排序后的键列表之后,你可以直接对照着定义SQL表的字段,不会因为个别卡牌缺字段漏建列。如果后续需要导入SQL,也可以直接基于这个键列表做字段映射,不用逐行遍历猜字段。
内容的提问来源于stack exchange,提问作者whatwhatwhat
相关产品推荐
相关产品推荐

