如何管道JSON在node.js中运行?

时间:2018-03-08 11:25:40

标签: json node.js

我问了这个问题:

How to pipe to function in node.js?

但我发现使用JSON并不容易。因为JSON是以块的形式流式传输的,所以当您尝试JSON.parse一个不代表完整JSON对象的块时,它会中断。

以下代码适用于小型JSON文件,但对于大型JSON文件则有效。如何在流式传输大型JSON文件时执行此操作?

const fs = require('fs')
const {Transform} = require('stream')

const jsonTransform = new Transform({
    readableObjectMode: true,
    writableObjectMode: true,
    transform: (chunk, encoding, done) => {
        let json = JSON.parse(chunk)
        // manipulate json here
        done(null, JSON.stringify(json, null, 2))
    }
})

fs.createReadStream('input.json')
    .pipe(jsonTransform)
    .pipe(fs.createWriteStream('output.json'))

1 个答案:

答案 0 :(得分:2)

npm上有一吨模块处理这个问题,例如: Dominic Tarr JSONstream input.json

另一种方法是确保</ul>中的json是换行符(ndjson),然后你可以使用https://github.com/dominictarr/JSONStream将每一行解析为一个对象,你可以将其进一步管理到修改对象和字符串化内容。