Я пытаюсь сериализовать и десериализовать объект, который содержит несколько буферов, однако десериализация результирующей строки из JSON.stringify() с JSON.parse() не позволяет правильно воссоздать Буферы.Как десериализовать вложенный буфер с помощью JSON.parse
var b64 = 'Jw8mm8h+agVwgI/yN1egchSax0WLWXSEVP0umVvv5zM=';
var buf = new Buffer(b64, 'base64');
var source = {
a: {
buffer: buf
}
};
var stringify = JSON.stringify(source);
var parse = JSON.parse(stringify);
console.log("source: "+source.a.buffer.constructor.name);
console.log("parse: "+parse.a.buffer.constructor.name);
Выдает поток вывода:
source: Buffer
parse: Object
Это имеет смысл, так как выход из Buffer.toJSON() создает простой объект, как так:
{
type: "Buffer",
data: [...]
}
Я предполагаю, что я мог пересечь результирующий объект ищет суб объекты, которые имеют вышеуказанные свойства и преобразовывают их обратно в буфер, однако я считаю, что должно быть более элегантное решение с использованием JSON.parse(), которое мне не хватает.
Нет, нет ничего более элегантного. Единственными структурированными типами данных, поддерживаемые JSON, являются объекты и массивы. 'JSON.parse' ничего не знает о' Buffer'. Метод Buffer.toJSON просто переводит буфер в нечто, что 'JSON.parse' может понять. – Barmar
Вы можете передать функцию [«reviver»] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse#Using_the_reviver_parameter) на 'JSON.parse' в порядке чтобы избежать ручного обхода. Когда вы найдете свойство 'buffer', вы берете значение и вручную создаете и возвращаете свой' Buffer'. –
@squint мы думали то же самое, извините, если я «украл» ваш ответ :-) – robertklep