buffer: implement Buffer.prototype.toJSON()
authorNathan Rajlich <nathan@tootallnate.net>
Sat, 8 Sep 2012 23:10:00 +0000 (16:10 -0700)
committerNathan Rajlich <nathan@tootallnate.net>
Sun, 9 Sep 2012 18:04:16 +0000 (11:04 -0700)
Returns an Array-representation of the Buffer.
Closes #3905.

doc/api/buffer.markdown
lib/buffer.js
test/simple/test-buffer.js

index 3be63e7..d96f4ac 100644 (file)
@@ -108,6 +108,25 @@ Decodes and returns a string from buffer data encoded with `encoding`
 See `buffer.write()` example, above.
 
 
+### buf.toJSON()
+
+Returns a JSON-representation of the Buffer instance, which is identical to the
+output for JSON Arrays. `JSON.stringify` implictly calls this function when
+stringifying a Buffer instance.
+
+Example:
+
+    var buf = new Buffer('test');
+    var json = JSON.stringify(buf);
+
+    console.log(json);
+    // '[116,101,115,116]'
+
+    var copy = new Buffer(JSON.parse(json));
+
+    console.log(copy);
+    // <Buffer 74 65 73 74>
+
 ### buf[index]
 
 <!--type=property-->
index 3001945..cdc0f4b 100644 (file)
@@ -411,6 +411,11 @@ Buffer.prototype.write = function(string, offset, length, encoding) {
 };
 
 
+Buffer.prototype.toJSON = function() {
+  return Array.prototype.slice.call(this, 0);
+};
+
+
 // toString(encoding, start=0, end=buffer.length)
 Buffer.prototype.toString = function(encoding, start, end) {
   encoding = String(encoding || 'utf8').toLowerCase();
index 8ab8568..c6d2a9f 100644 (file)
@@ -748,3 +748,7 @@ Buffer(Buffer(0), 0, 0);
   'new gnu gun'  ].forEach(function(enc) {
     assert.equal(Buffer.isEncoding(enc), false);
   });
+
+
+// GH-3905
+assert.equal(JSON.stringify(Buffer('test')), '[116,101,115,116]');