Converta um objeto JSON em Buffer e Buffer em objeto JSON de volta

101

Eu tenho um objeto JSON e estou convertendo-o em um Buffere fazendo alguns processos aqui. Posteriormente, desejo converter os mesmos dados de buffer para converter em objeto JSON válido.

Estou trabalhando no Node V6.9.1

Abaixo está o código que tentei, mas estou obtendo [object object]quando converti de volta para JSON e não consigo abrir este objeto.

var obj = {
   key:'value',
   key:'value',
   key:'value',
   key:'value',
   key:'value'
}

var buf = new Buffer.from(obj.toString());

console.log('Real Buffer ' + buf);  //This prints --> Real Buffer <Buffer 5b 6f 62 6a 65 63 74>

var temp = buf.toString();

console.log('Buffer to String ' + buf);  //This prints --> Buffer to String [object Object]

Então eu tentei imprimir o objeto inteiro usando a maneira de inspeção

console.log('Full temp ' + require('util').inspect(buf, { depth: null }));  //This prints --> '[object object]' [not printing the obj like declared above]

Se eu tentar ler como um array

 console.log(buf[0]);  // This prints --> [ 

Eu tentei analisar também jogar SyntaxError: Unexpected token o in JSON at position 2

Eu preciso vê-lo como um objeto real, como eu criei (quero dizer, como declarado acima).

Por favor ajude..

Prasanth J
fonte
({"id":"value"}).toString() === '[object Object]' //true
Eric Hodonsky
new Buffer()está obsoleto. Veja aqui: nodejs.org/api/buffer.html#buffer_new_buffer_array
Spencer

Respostas:

181

Você precisa sequenciar o json, não chamar toString

var buf = Buffer.from(JSON.stringify(obj));

E para converter string em obj json:

var temp = JSON.parse(buf.toString());
Ebrahim Pasbani
fonte
1
não preciso donew
jpillora
2
Não existe uma solução melhor? Não gosto de converter números em strings.
Benoit
1
Isso não funcionará se houver outro campo de buffer emobj
gilamran
7
na verdade, toString não é necessário aqui. groups.google.com/forum/#!topic/nodejs/hybuh7DbQkM
Dzenly
1
para mim, funcionou quando tirei o JSON.stringify e coloquei o objeto diretamente dentro dos parâmetros, assim: var buf = Buffer.from ({chave: 'valor', chave: 'valor', chave: 'valor' , chave: 'valor', chave: 'valor'});
Jorge Mauricio