Nodejs Parse Json 文件将输入转换为 JSON 数组写入文件

Posted

技术标签:

【中文标题】Nodejs Parse Json 文件将输入转换为 JSON 数组写入文件【英文标题】:Nodejs Parse Json file transform the input and write to file as JSON array 【发布时间】:2018-01-24 12:45:39 【问题描述】:

我需要读取一个非常大的位置历史记录文件并提取一些数据并将其作为 JSON 数据写入文件。我怎样才能做到这一点。 以下代码不会生成任何输出。 编辑: 我希望在文件中输出字符串,因为它通过管道传输到 fileOutputStream

const fs = require('fs')
var JSONStream = require('JSONStream');
var es = require('event-stream');
const filePath = './location-history.json'
const fileOutputPath = './transform-location-history.json'

fileStream = fs.createReadStream(filePath);
fileOutputStream = fs.createWriteStream(fileOutputPath)

const  transformer = (data) => 
  const location = 
        latitude: data.latitudeE7 / 10000000,
        longitude: data.longitudeE7 / 10000000
    
  return JSON.stringify(location);


fileStream
.pipe(JSONStream.parse('locations.*'))
.pipe(es.through(transformer))
.pipe(fileOutputStream)

【问题讨论】:

Parse large JSON file in Nodejs的可能重复 为什么不写入输出流? 一切看起来都很好。你会提到你从哪里获取数据变量的值 gist.github.com/tuncatunc/d4670b73032d4473a7236ac95514c3d0 示例输入。原始文件有超过200K点。 【参考方案1】:

这是我的问题的解决方案。 JSONStream 解析输入文件并吐出 JSON 对象。 es.through(transformer) 获取 JSON 对象并将其作为字符串写入文件。为了使文件输出文件在 ES6 中可导入,添加了“导出默认 locationHistory”。 https://gist.github.com/tuncatunc/35e5449905159928e718d82c06bc66da

const fs = require('fs')
const JSONStream = require('JSONStream');
var es = require('event-stream');
const filePath = './location-history.json'
const fileOutputPath = './transform-location-history.js'

const fileStream = fs.createReadStream(filePath);
const fileOutputStream = fs.createWriteStream(fileOutputPath)

let index = 0;
const  transformer = (data) => 
  const location = 
        latitude: data.latitudeE7 / 10000000,
        longitude: data.longitudeE7 / 10000000
    ;
  let result = JSON.stringify(location) + ',';
  if (index === 0) 
    result = 'const locationHistory = [' + result
  
  index++;
  if (index < 100)
    fileOutputStream.write(result);


const end = () => 
  const finish = ']; export default locationHistory\n'
  fileOutputStream.write(finish, () => 
    fileOutputStream.close()
  )
  console.log(`$index objects are written to file`)


fileStream
.pipe(JSONStream.parse('locations.*'))
.pipe(es.through(transformer, end))

【讨论】:

以上是关于Nodejs Parse Json 文件将输入转换为 JSON 数组写入文件的主要内容,如果未能解决你的问题,请参考以下文章

nodejs 怎么下载远程文件并该名称

SyntaxError:JSON.parse (<anonymous>) 处的 JSON 输入意外结束

NodeJs JSON.parse-SyntaxError:JSON中位置0处的意外令牌u

Node.js-nodejs可否读取远程文件到本地 有没有像php file

nodeJs 转换excel为json

json.stringfy()和json.parse()