Преобразование объекта JSON в буфер и буфера в объект JSON обратно


106

У меня есть объект JSON, я конвертирую его в 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]

Итак, я попытался распечатать весь объект, используя способ проверки

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
Спенсер,

Ответы:


193

Вам нужно структурировать json, а не вызывать toString

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

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

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

1
не нужноnew
jpillora

2
Нет лучшего решения? Я не люблю преобразовывать числа в строку.
Benoit

1
Это не сработает, если есть еще одно буферное полеobj
gilamran

7
на самом деле toString здесь не нужен. groups.google.com/forum/#!topic/nodejs/hybuh7DbQkM
Dzenly

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