Przekonwertuj obiekt JSON na bufor i bufor na obiekt JSON z powrotem

106

Mam obiekt JSON i konwertuję go na a Bufferi wykonuję tutaj pewien proces. Później chcę przekonwertować te same dane bufora, aby przekonwertować je na ważny obiekt JSON.

Pracuję na Node V6.9.1

Poniżej znajduje się kod, który próbowałem, ale otrzymuję, [object object]gdy konwertuję z powrotem na JSON i nie mogę otworzyć tego obiektu.

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]

Próbowałem więc wydrukować cały obiekt metodą inspekcji

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

Jeśli spróbuję odczytać to jak tablicę

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

Próbowałem też parsować to rzut SyntaxError: Unexpected token o in JSON at position 2

Muszę zobaczyć to jako rzeczywisty obiekt, jaki stworzyłem (mam na myśli zadeklarowany powyżej).

Proszę pomóż..

Prasanth J
źródło
({"id":"value"}).toString() === '[object Object]' //true
Eric Hodonsky
new Buffer()jest przestarzałe. Zobacz tutaj: nodejs.org/api/buffer.html#buffer_new_buffer_array
Spencer,

Odpowiedzi:

193

Musisz zdefiniować json, a nie dzwonić toString

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

I do konwersji ciągu znaków na json obj:

var temp = JSON.parse(buf.toString());
Ebrahim Pasbani
źródło
1
nie potrzebujęnew
jpillora
2
Czy nie ma lepszego rozwiązania? Nie lubię zamieniać liczb na ciąg.
Benoit
1
To nie zadziała, jeśli jest inne pole buforowe wobj
gilamran,
7
właściwie toString nie jest tutaj potrzebne. groups.google.com/forum/#!topic/nodejs/hybuh7DbQkM
Dzenly
1
dla mnie zadziałało, gdy zabrałem JSON.stringify i umieściłem obiekt bezpośrednio w parametrach, na przykład: var buf = Buffer.from ({klucz: 'wartość', klucz: 'wartość', klucz: 'wartość' , klucz: 'wartość', klucz: 'wartość'});
Jorge Mauricio