Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 使用转换流将JS对象转换为JSON_Node.js_Node Streams_Nodejs Stream - Fatal编程技术网

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,

请注意,有许多变换流可以执行此操作:

JSON->JS

但我希望创建一个Node.js转换流,它可以:

JS->JSON

我有一个可读的流:

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);