Convierta un objeto JSON en búfer y un búfer en objeto JSON de nuevo

101

Tengo un objeto JSON y lo estoy convirtiendo a Buffery haciendo algún proceso aquí. Más tarde, quiero convertir los mismos datos de búfer para convertirlos en un objeto JSON válido.

Estoy trabajando en Node V6.9.1

A continuación se muestra el código que probé, pero obtengo [object object]cuando vuelvo a convertir a JSON y no puedo 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]

Así que intenté imprimir el objeto completo usando la forma de inspección

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

Si trato de leerlo como una matriz

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

Intenté analizar también lo arrojó SyntaxError: Unexpected token o in JSON at position 2

Necesito verlo como un objeto real como lo creé (me refiero a lo declarado anteriormente).

Por favor ayuda..

Prasanth J
fuente
({"id":"value"}).toString() === '[object Object]' //true
Eric Hodonsky
new Buffer()es obsoleto. Ver aquí: nodejs.org/api/buffer.html#buffer_new_buffer_array
Spencer

Respuestas:

181

Necesitas secuenciar el json, no llamar toString

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

Y para convertir string a json obj:

var temp = JSON.parse(buf.toString());
Ebrahim Pasbani
fuente
1
no necesito elnew
jpillora
2
¿No hay una solución mejor? No me gusta convertir números en una cadena.
Benoit
1
Esto no funcionará si hay otro campo de búfer enobj
gilamran
7
de hecho, aquí no se necesita toString. groups.google.com/forum/#!topic/nodejs/hybuh7DbQkM
Dzenly
1
para mí, funcionó cuando quité el JSON.stringify y puse el objeto directamente dentro de los parámetros, así: var buf = Buffer.from ({clave: 'valor', clave: 'valor', clave: 'valor' , clave: 'valor', clave: 'valor'});
Jorge Mauricio