Converti un oggetto JSON in Buffer e Buffer in oggetto JSON indietro


101

Ho un oggetto JSON e lo sto convertendo in un Buffere sto eseguendo un processo qui. Successivamente voglio convertire gli stessi dati del buffer per convertirli in un oggetto JSON valido.

Sto lavorando su Node V6.9.1

Di seguito è riportato il codice che ho provato ma ricevo [object object]quando converto di nuovo in JSON e non riesco ad aprire questo oggetto.

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]

Quindi ho provato a stampare l'intero oggetto usando il modo Inspect

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

Se provo a leggerlo come un array

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

Ho provato anche ad analizzarlo SyntaxError: Unexpected token o in JSON at position 2

Ho bisogno di vederlo come un oggetto reale come ho creato (intendo come dichiarato sopra).

Per favore aiuto..


({"id":"value"}).toString() === '[object Object]' //true
Eric Hodonsky

new Buffer()è deprecato. Vedi qui: nodejs.org/api/buffer.html#buffer_new_buffer_array
Spencer

Risposte:


181

Devi stringere il json, non chiamare toString

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

E per convertire la stringa in json obj:

var temp = JSON.parse(buf.toString());

1
non è necessario ilnew
jpillora

2
Non c'è una soluzione migliore? Non mi piace convertire i numeri in una stringa.
Benoit

1
Questo non funzionerà se c'è un altro campo buffer inobj
gilamran

7
in realtà, toString non è necessario qui. groups.google.com/forum/#!topic/nodejs/hybuh7DbQkM
Dzenly

1
per me, ha funzionato quando ho rimosso JSON.stringify e ho inserito l'oggetto direttamente all'interno dei parametri, in questo modo: var buf = Buffer.from ({key: 'value', key: 'value', key: 'value' , chiave: "valore", chiave: "valore"});
Jorge Mauricio il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.