แปลง JSON Object เป็น Buffer และ Buffer เป็น JSON Object กลับ


111

ฉันมีออบเจ็กต์ 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]

ดังนั้นฉันจึงพยายามพิมพ์วัตถุทั้งหมดโดยใช้วิธีตรวจสอบ

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
Eric Hodonsky

new Buffer()เลิกใช้แล้ว ดูที่นี่: nodejs.org/api/buffer.html#buffer_new_buffer_array
Spencer

คำตอบ:


199

คุณต้องสตริง 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' , คีย์: 'value', คีย์: 'value'});
Jorge Mauricio
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.