Node.js 使用转换流将JS对象转换为JSON
请注意,有许多变换流可以执行此操作: JSON->JS 但我希望创建一个Node.js转换流,它可以: JS->JSON 我有一个可读的流:Node.js 使用转换流将JS对象转换为JSON,node.js,node-streams,nodejs-stream,Node.js,Node Streams,Nodejs Stream,请注意,有许多变换流可以执行此操作: JSON->JS 但我希望创建一个Node.js转换流,它可以: JS->JSON 我有一个可读的流: const readable = getReadableStream({objectMode:true}); 可读流输出对象,而不是字符串 我需要创建一个转换流,它可以过滤其中一些对象,并将这些对象转换为JSON,如下所示: const t = new Transform({ objectMode: true, transform(chunk,
const readable = getReadableStream({objectMode:true});
可读流输出对象,而不是字符串
我需要创建一个转换流,它可以过滤其中一些对象,并将这些对象转换为JSON,如下所示:
const t = new Transform({
objectMode: true,
transform(chunk, encoding, cb) {
if(chunk && chunk.marker === true){
this.push(JSON.stringify(chunk));
}
cb();
},
flush(cb) {
cb();
}
});
但是,由于某些原因,我的转换流无法接受转换方法的对象,只有字符串和缓冲区,我能做什么?
我尝试添加这两个选项:
const t = new Transform({
objectMode: true,
readableObjectMode: true, // added this
writableObjectMode: true, // added this too
transform(chunk, encoding, cb) {
this.push(chunk);
cb();
},
flush(cb) {
cb();
}
});
不幸的是,我的转换流仍然不能接受对象,只能接受字符串/缓冲区。您只需要在转换流上使用
writeableobjectmode:true
options <Object> Passed to both Writable and Readable constructors. Also has the following fields:
readableObjectMode <boolean> Defaults to false. Sets objectMode for readable side of the stream. Has no effect if objectMode is true.
writableObjectMode <boolean> Defaults to false. Sets objectMode for writable side of the stream. Has no effect if objectMode is true.
const { Readable, Writable, Transform } = require('stream');
let counter = 0;
const input = new Readable({
objectMode: true,
read(size) {
setInterval( () => {
this.push({c: counter++});
}, 1000);
}
});
const output = new Writable({
write(chunk, encoding, callback) {
console.log('writing chunk: ', chunk.toString());
callback();
}
});
const transform = new Transform({
writableObjectMode: true,
transform(chunk, encoding, callback) {
this.push(JSON.stringify(chunk));
callback();
}
});
input.pipe(transform);
transform.pipe(output);