Перетворити об'єкт JSON на буфер, а буфер на об'єкт JSON назад


101

У мене є об'єкт JSON, і я перетворюю його на a Bufferі виконую тут якийсь процес. Пізніше я хочу перетворити ті самі дані буфера для перетворення у дійсний об'єкт JSON.

Я працюю над Node V6.9.1

Нижче наведено код, який я спробував, але я отримую, [object object]коли перетворюю назад у JSON і не можу відкрити цей об’єкт.

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]

Тож я спробував надрукувати цілий об’єкт, використовуючи спосіб inspect

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

Якщо я спробую прочитати це як масив

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

Я спробував розібрати і його кидок SyntaxError: Unexpected token o in JSON at position 2

Мені потрібно розглядати його як реальний об'єкт, як я створив (я маю на увазі, як заявлено вище).

Будь ласка, допоможіть..


({"id":"value"}).toString() === '[object Object]' //true
Ерік Ходонскі

new Buffer()застаріло. Дивіться тут: nodejs.org/api/buffer.html#buffer_new_buffer_array
Спенсер

Відповіді:


181

Вам потрібно розшифрувати json, а не викликати toString

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

А для перетворення рядка в json obj:

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

1
не потрібноnew
jpillora

2
Чи немає кращого рішення? Я не люблю перетворювати числа в рядок.
Бенуа

1
Це не спрацює, якщо є інше буферне полеobj
gilamran

7
насправді, toString тут не потрібен. groups.google.com/forum/#!topic/nodejs/hybuh7DbQkM
Дзенлі

1
для мене це спрацювало, коли я забрав JSON.stringify і помістив об’єкт безпосередньо всередину параметрів, наприклад: var buf = Buffer.from ({key: 'value', key: 'value', key: 'value' , ключ: 'значення', ключ: 'значення'});
Хорхе Маурісіо,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.