所以我最近一直试图通过创建一个网站来学习如何使用django,该网站使用户能够创建魔法收集套牌。这个问题与python有关,而不是django框架本身。
无论如何我试图解析一个包含大约200套MTG的巨大json文件,每组有多张卡,然后该卡有多种类型,你可以从下图中看到,所以它是一个相当复杂的数据结构。
现在,解析所有数据的当前正在使用for循环:
def InsertFormats():
json_object = setJson()
for sets in json_object:
for cards in json_object[sets]['cards']:
if 'legalities' in cards:
for legalities in cards['legalities']:
cardFormat = legalities['format']
legalType = legalities['legality']
obj, created = CardFormat.objects.get_or_create(cardFormat=cardFormat)
obj, created = LegalTypes.objects.get_or_create(legalType=legalType)
但问题是它会随机出现此错误
处理完成,退出代码为-1073741819
我只假设由于此功能正在进行的迭代量而发生。我有这样的多个函数来将数据从json对象插入到我的数据库中。
有没有其他方法可以遍历一个大的json对象而不需要经过这么多的for循环来获取我需要的数据或至少以便它不会崩溃?
答案 0 :(得分:0)
这是内存分配错误。 Python dicts不能很好地分配具有大型数据集的内存。
您可以尝试其他容器数据类型。作为namedtuples(比dict更轻):
from collections import namedtuple
import json
with open(yourfile) as f:
json_object = json.load(
f,
object_hook = lambda x: namedtuple('JsonObject', x.keys())(**x)
)