python - 遍历 JSON 中的字符串数组
问题描述
我希望将本地 JSON 文件中的数据导入我的 DB Django。但是,我遇到了一个问题,因为我的 JSON 文件包含每个元素的 String 数组,我无法对其进行迭代。
JSON 文件示例:
[
{
"key": "sword",
"name": "Sword",
"tier": 1,
"tab": [
"damages",
"cac"
]
},
{
"key": "bow",
"name": "Bow",
"tier": 1,
"tab": [
"damages",
"distance"
]
},
...
]
我使用如下脚本导入这些数据:
class Command(BaseCommand):
def add_arguments(self, parser):
parser.add_argument('json_file', type=str)
def handle(self, *args, **options):
with open(options['json_file']) as f:
data_list = json.load(f)
for data in data_list:
Item.objects.get_or_create(
key=data['key'],
name=data['name'],
tier=data['tier'],
)
for build in data['tab']:
Build.objects.get_or_create(
key = build
)
上面的脚本不起作用,我在控制台中有以下错误:
KeyError: 'tab'
解决方案
根据错误消息,看起来并非所有字典都有"tab"
键。您可以通过以下方式使该功能更加安全:
class Command(BaseCommand):
def add_arguments(self, parser):
parser.add_argument('json_file', type=str)
def handle(self, *args, **options):
with open(options['json_file']) as f:
data_list = json.load(f)
for data in data_list:
Item.objects.get_or_create(
key=data['key'],
name=data['name'],
tier=data['tier'],
)
for build in data.get('tab', ()):
Build.objects.get_or_create(
key = build
)
推荐阅读
- go - Sentry CaptureMessage 不刷新
- python - Python Pyinstaller MSYS 问题与 PyQtWebKit
- reactjs - 如何在使用 React Chrome 扩展程序打开页面之前显示弹出窗口?
- c++ - 为什么qt不进入foreach循环?
- kubeflow - 如何在 kubeflow 中跨多个组件使用 OutputPath
- android - 按下输入框中的箭头时显示自定义视图。(在本机反应中)
- regex - 尝试匹配分隔符之间的字符
- visual-studio - 在 Windows 安全模式下运行 Visual Studio
- python - 捕获 TypeError:缺少 1 个必需的位置参数:'self'
- apache-kafka - Kafka max.in.flight.request.per.connection