【发布时间】:2020-08-09 12:33:46
【问题描述】:
我有一个 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。或者我想在使用require 时嵌入bson。这是一些工具生成的数据,所以它会在一个数据文件中。
我还没弄明白。我试过以下。但这会导致result 包含File 的bits 或看起来像内容类型的内容(如果以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);
加载本地二进制文件的正确方法是什么?大概,一旦我有了数据,我就可以从bson 包中调用deserialize。
好的,我在这里添加一些更正。
我读取文件的方法是错误的。我知道File 实际上会创建一个文件。因此,当它被传递给FileReader 时,它会获取传入的两个bits 的值。
我发现我可以通过两种方式获取本地文件。我可以使用XMLHttpRequest 以及raw-loader 加载程序。
但是一旦我这样做了。我似乎无法使用 bson 将内容转换为 JSON。 deserialize、serialize、parse 或 stringify 的任何变体都有一些问题。
是否有人碰巧有正确的方法将 BSON 内容转换为 Javascript 对象?
请注意,BSON 是使用 pymongo 从 python 生成的。我生成 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。所以看起来我加载的文件是有效的。
【问题讨论】:
-
你明白了吗?
标签: javascript bson