json - 如何通过管道传递 JSON 以在 Node.js 中运行?

标签 json node.js

我问了这个问题:

How to pipe to function in node.js?

但我发现使用 JSON 时并不那么容易。由于 JSON 以 block 的形式进行流式传输,因此当您尝试 JSON.parse 不代表完整 JSON 对象的 block 时,它会中断。

以下代码适用于小型 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'))

最佳答案

npm 上有大量模块可以处理这个问题,例如JSONstream 作者:Dominic Tarr https://github.com/dominictarr/JSONStream

另一种方法是确保 input.json 中的 json 以换行符分隔 (ndjson),然后您可以使用 https://github.com/maxogden/ndjson将每一行解析为一个对象,然后您可以通过管道将其进一步修改对象并将内容字符串化。

关于json - 如何通过管道传递 JSON 以在 Node.js 中运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49171957/

相关文章:

c# - 创建泛型类型的实例时无法提供参数

json - 使用 SwiftyJSON 解析 JSON 时出现问题

arrays - 从 Mongoose 数组中删除元素

javascript - Protractor 无法访问其类共享其他元素的特定元素

javascript - OAuth2,使用 POST 但...方法不允许?

javascript - 如何在 Java 中将 PostGIS 数据库中的数据转换为 GeoJSON

PHP-MySQL结果转换为JSON

PHP JSON 字符串格式错误

javascript - node.js 不导入 css 和 js 文件

node.js - MongoDB/Mongoose $pull(删除)子文档不起作用