繁体   English   中英

在JSON中迭代字符串数组

[英]Iterate through a string array in JSON

我想从本地JSON文件导入数据到我的数据库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
                )

此错误表示您的某个实例没有tab键。 在这种情况下,您可以使用带有默认空列表值[] get方法跳过创建Build实例:

for build in data.get('tab', []):
    Build.objects.get_or_create(
        key = build
    )

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM