Вот чрезвычайно упрощенный пример того, что мы делаем, чтобы использовать загрузчик для загрузки данных JSON вместо данных CSV:
class JSONLoader(bulkloader.Loader):
def generate_records(self, filename):
for item in json.load(open(filename)):
yield item['fields']
В этом примере я предполагаю, что формат JSON выглядит примерно так:
[
{
"fields": [
"a",
"b",
"c",
"d"
]
},
{
"fields": [
"e",
"f",
"g",
"h"
]
}
]
что упрощенно.
По сути, все, что вам нужно сделать, - это создать подкласс bulkloader.Loader и реализовать (как минимум) метод generate_records
, который должен давать списки строк. Эта же стратегия будет работать для загрузки данных из файлов XML или файлов, зашифрованных ROT13, или чего-либо другого.
Обратите внимание, что список строк, полученных методом generate_records
, должен совпадать (по длине и в порядке) со списком "свойств", который вы предоставляете при инициализации загрузчика (т. Е. Вторым аргументом метода AlbumLoader.__init__
в этот пример ).
Этот подход на самом деле обеспечивает большую гибкость: мы переопределяем метод __init__
в нашей реализации JSONLoader
и автоматически определяем kind
модели, которую мы загружаем, и ее список свойств, предоставляемых bulkloader.Loader
родительский класс.