peach a19a732be8 commit message | 2 年 前 | |
---|---|---|
.. | ||
CHANGELOG.md | 2 年 前 | |
README.md | 2 年 前 | |
index.js | 2 年 前 | |
package.json | 2 年 前 |
npm install buffer-json
const BJSON = require('buffer-json')
const str = BJSON.stringify({ buf: Buffer.from('hello') })
// => '{"buf":{"type":"Buffer","data":"base64:aGVsbG8="}}'
BJSON.parse(str)
// => { buf: <Buffer 68 65 6c 6c 6f> }
The Buffer
class in Node.js is used to represent binary data. JSON does not specify a way to encode binary data, so the Node.js implementation of JSON.stringify
represents buffers as an object of shape { type: "Buffer", data: [<bytes as numbers>] }
. Unfortunately, JSON.parse
does not turn this structure back into a Buffer
object:
$ node
> JSON.parse(JSON.stringify({ buf: Buffer.from('hello world') }))
{ buf:
{ type: 'Buffer',
data: [ 104, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100 ] } }
JSON.stringify
and JSON.parse
accept arguments called replacer
and reviver
respectively which allow customizing the parsing/encoding behavior. This module provides a replacer which encodes Buffer data as a base64-encoded string, and a reviver which turns JSON objects which contain buffer-like data (either as arrays of numbers or strings) into Buffer
instances. All other types of values are parsed/encoded as normal.
stringify(value[, space])
Convenience wrapper for JSON.stringify
with the replacer
described below.
parse(text)
Convenience wrapper for JSON.parse
with the reviver
described below.
replacer(key, value)
A replacer
implementation which turns every value that is a Buffer
instance into an object of shape { type: 'Buffer', data: 'base64:<base64-encoded buffer content>' }
. Empty buffers are encoded as { type: 'Buffer', data: '' }
.
reviver(key, value)
A reviver
implementation which turns every object of shape { type: 'Buffer', data: <array of numbers or string> }
into a Buffer
instance.
buffer-json-encoding
: an abstract-encoding
compatible JSON encoder/decoder which uses this module.MIT