Чтение локального файла BSON в Javascript - PullRequest
1 голос
/ 26 апреля 2020

У меня есть HTML 5 игра. Я использую webpack / typescript для разработки.

У меня есть некоторые данные, которые я включил, используя require, например:

    const dataJson = require('scripts/data/data.json');

Я хотел бы сделать эквивалент кроме как с bson. Я попробовал наивный подход сделать что-то вроде этого

    const dataJson = require('scripts/data/data.bson');

, но это, конечно, не удается, так как нет загрузчика (не будет компилироваться с currently no loaders are configured to process this file.).

Я бы хотел чтобы затем включить файл локально, загрузить файл и затем десериализовать bson. Или я хотел бы вставить bson как при использовании require. Это какой-то инструмент, сгенерированный данными, поэтому он будет в файле данных.

Я не смог понять это. Я попробовал следующее. Но это приводит к тому, что result содержит либо bits из File, либо что-то похожее на тип содержимого (если сделано как readAsDataURL).

То, что я пробовал

    const file = new File(['data'], 'assets/data.bson', { type: 'application/bson' });
    const reader = new FileReader();
    reader.onload=(theFile) => {
        if (theFile.target) {
            console.log(theFile.target.result);
        }

    } ;
    reader.readAsDataURL(file);
    //reader.readAsBinaryString(file);

Как правильно загрузить локальный двоичный файл? Предположительно, когда у меня есть данные, я могу просто позвонить deserialize из пакета bson.

Хорошо, я добавляю некоторые исправления здесь. Мой метод чтения файлов неверен. Я знаю, что File на самом деле создаст файл. Поэтому, когда это передается FileReader, он получает значение обоих переданных bits.

Я обнаружил, что могу получить локальные файлы двумя способами. Я могу использовать XMLHttpRequest, а также raw-loader loader.

Однако, как только я это сделаю. Я не могу конвертировать содержимое в JSON, используя bson. Любой вариант deserialize, serialize, parse или stringify имеет какую-то проблему.

У кого-нибудь есть правильный метод преобразования содержимого BSON в объект Javascript?

Обратите внимание, что BSON генерируется из python с использованием pymongo. Мой код для генерации BSON следующий:

            with open(args.output_bson, 'wb') as fp:
                encoded = bson.encode(data_meta.to_dict())
                fp.write(encoded)

to_dict - словарь. Я выводил как JSON (используя json), так и BSON.

Я также протестировал файл с bsondump, и он действительно конвертируется в JSON. Похоже, что загруженный файл действителен.

1 Ответ

0 голосов
/ 26 апреля 2020

вы можете использовать bson

, затем позвоните:

BSON.deserialize(theFile.target.result);
...