如何从此 JSON 文件中提取所有密钥?
How do I extract all keys from this JSON file?
我正在使用的数据是游戏王卡片的完整列表,可在该端点找到:https://db.ygoprodeck.com/api/v7/cardinfo.php
有一个顶级 data
节点我可以忽略,但紧随其后的每个子节点(0
、1
、2
、.. .) 是卡组中的一张独特卡牌。我想找出整个数据集中有多少个唯一键。棘手的部分是每张卡片可能有不同的子节点。最终我想把这一切都放入 SQL 表中,但现在我需要知道所有的键。键的一些示例是 id
、name
、archetype
、atk
、def
和 card_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'}
我正在使用的数据是游戏王卡片的完整列表,可在该端点找到:https://db.ygoprodeck.com/api/v7/cardinfo.php
有一个顶级 data
节点我可以忽略,但紧随其后的每个子节点(0
、1
、2
、.. .) 是卡组中的一张独特卡牌。我想找出整个数据集中有多少个唯一键。棘手的部分是每张卡片可能有不同的子节点。最终我想把这一切都放入 SQL 表中,但现在我需要知道所有的键。键的一些示例是 id
、name
、archetype
、atk
、def
和 card_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'}