我有一个HTML 5游戏。我正在使用webpack /打字稿进行开发。
[通过使用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
加载程序。
但是我曾经这样做。我似乎无法使用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。因此看来我加载的文件是有效的。