首页 > 解决方案 > 遍历 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'

标签: pythonjsondjango

解决方案


根据错误消息,看起来并非所有字典都有"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
                )

推荐阅读