La0*_*0x1 6 javascript arrays json bson uint8array
我在浏览器中使用“ bson ”npm 包将 JSON 对象转换/序列化为 BSON。文档说它返回一个 Node.js 缓冲区。Node.js 的文档说缓冲区的类型为“Uint8Array”。现在我想在另一个 JSON 对象 (infoJSON) 中发送这个 Uint8Array,但 JSON 不支持 Uint8Array。我尝试将缓冲区 (Uint8Array) 转换为简单数组,将其插入到 JSON 对象 (infoJSON) 中,然后直接从 JSON 对象将其转换回 Uint8Array。但是这个新的 Uint8Array 无法反序列化回原来的 person 对象(参见结果)。它被打破。
为什么我使用 BSON?我想将原始对象分割成多个块,以通过具有数据大小限制的WebRTC数据通道发送它。我需要能够识别每个块(类型)。这就是我使用嵌套对象的原因。
var personJSON = { 'name': 'sarah' } // JSON
var personBuffer = Bson.serialize(personJSON) // Uint8Array
var personArray = Array.from(personBuffer) // Simple array
var infoJSON = { 'count': 1, 'person': personArray } // Inserting array into JSON
var personUint8Array = Uint8Array.from(infoJSON.person) // Converting array back to Uint8Array
console.log('deserializedObj:')
console.log(Bson.deserialize(personUint8Array))
Run Code Online (Sandbox Code Playgroud)
结果:
这是因为Bson.serialize并Bson.deserialize使用 Node.js 之类的Bufferobject。
您可以通过使用底层ArrayBuffer创建Uint8Array(在线测试)并使用然后使用来纠正此问题Buffer.from:
var personJSON = { 'name': 'sarah' } // JSON
var personBuffer = new Uint8Array(Bson.serialize(personJSON).buffer) // Uint8Array
var personArray = Array.from(personBuffer) // Simple array
var infoJSON = { 'count': 1, 'person': personArray } // Inserting array into JSON
var personUint8Array = Uint8Array.from(infoJSON.person) // Converting array back to Uint8Array
console.log('deserializedObj:')
console.log(Bson.deserialize(Buffer.from(personBuffer)))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15393 次 |
| 最近记录: |