【问题标题】:Using buffers and streams to write the data使用缓冲区和流写入数据
【发布时间】:2018-03-13 07:03:31
【问题描述】:

我需要一个 node.js 程序来执行以下操作 我有一个巨大的 JSON 数据,其中有数千条记录,我需要使用流复制到另一个文件。但是有 3 个键值对,但我只需要复制一个键值(即)我有 nameagecity,但我在另一个文件中只需要 json 记录的名称。

如果有其他选择,你能建议我吗?而且文件太大,包含数千条记录。

样本数据作为

[  
   {  
      "name":"John",
      "age":31,
      "city":"New York"
   },
   {  
      "name":"vamsi",
      "age":31,
      "city":"New York"
   },
   {  
      "name":"loga",
      "age":31,
      "city":"New York"
   },
   {  
      "name":"krishna",
      "age":31,
      "city":"New York"
   },
   {  
      "name":"kishore",
      "age":31,
      "city":"New York"
   },
   {  
      "name":"reddy",
      "age":31,
      "city":"New York"
   }
]

【问题讨论】:

  • 如果数据按照示例中的逐行方式正确格式化,则可以使用nodejs内置模块中的readline模块逐行读取json。

标签: javascript json node.js stream buffer


【解决方案1】:

应该很容易使用流:

首先安装一些用于流式传输 JSON 和转换的模块

npm install --save JSONStream scramjet

然后编写代码:

const scramjet = require("scramjet");
const fs = require("fs");
const JSONStream = require("JSONStream")

fs.createReadStream(filename)             // open the file
    .pipe(JSONStream.parse('*'))          // parse JSON array to object stream
    .pipe(new scramjet.DataStream)        // pipe for transformation
    .map(({name}) => name)                 // extract "name" field from each object
    .toJSONArray()                        // create an array stream
    .pipe(fs.createWriteStream(outname)); // write to output.

查看文档了解更多信息:

【讨论】:

  • 感谢您的回复,但代码不起作用 .map(({name} => name)) // 从每个对象中提取“name”字段 ^ SyntaxError: Unexpected token }
  • 立即尝试。少了一个括号
猜你喜欢
  • 2019-08-13
  • 1970-01-01
  • 2018-01-04
  • 2023-03-11
  • 1970-01-01
  • 1970-01-01
  • 2021-04-29
  • 2019-02-28
  • 1970-01-01
相关资源
最近更新 更多