python - 在 python 中解析一些 JSON 时遇到问题
问题描述
我正在尝试从https://mtgjson.com/json/AllCards.json解析一些 JSON 数据,但我不确定如何处理其结构方式。这是我的代码片段:
cards = json.loads(open("AllCards.json", encoding="utf8").read())
for card in cards:
print(card)
我期待“card”是一个字典,然后我可以使用它来访问属性,例如“card['name']”。但是,在这种情况下,所有“卡片”都是包含键值的字符串,因此我不能使用它来访问任何嵌套属性。如果我打印“卡片”,它会输出整个 JSON 文档,包括所有嵌套属性。
我也尝试使用卡 [0] 访问它们,但这给了我一个关键错误。
我显然在这里遗漏了一些东西,但我不知道是什么。
解决方案
默认情况下,迭代字典将迭代其键。
如果你也想要这些值,你应该迭代dict.items()
:
import json
cards = json.loads(open("AllCards.json", encoding="utf8").read())
for key, value in cards.items():
print(key, value)
value
将包含子字典。
这是一样的
import json
cards = json.loads(open("AllCards.json", encoding="utf8").read())
for key in cards:
print(key, cards[key])
如果您不关心密钥,则可以直接迭代值:
import json
cards = json.loads(open("AllCards.json", encoding="utf8").read())
for card in cards.values():
print(card)
推荐阅读
- c# - 将 C# ASP.Net 中继承的接口文档导出到 Swagger OAS3
- pine-script - 安全功能达到极限
- javascript - 图像弹出不工作。问题是什么?
- json - 获取嵌套映射中的每个键条目
- mysql - 将选定的数据插入到其他数据库中的多个表中
- oracle - 如何从 oracle plsql 调用 curl 命令?
- laravel - hasOneThrough 和 hasManyThrough 在 Eloquent 中不起作用
- mysql - 具有混合选择行顺序的 Sql 查询
- jsonpath - JSONPath - 如果数组包含字符串,则过滤表达式以打印字段
- session - 使用 fastify-session 和 fastify-webockets 时,如何访问会话?