Nodejs fs模块:如何readFile并创建json对象?

时间:2016-07-05 21:00:07

标签: javascript json node.js

我正在从文件中读取下面的数据现在我想从中创建json对象,如何使用nodejs fs模块创建它?

app.js

var path = "./ditLogs/" + file;
                fs.readFile(path, function(err, data) {
                   console.log('reading file data', data.toString());
                });

这是我需要为

创建json的文件中的数据

file.txt

{"event":"test data"}
{"event":"test data"}
{"event":"test data"}

4 个答案:

答案 0 :(得分:1)

您可以使用以下示例函数:

function(strFromFile) {
  try {
    return JSON.parse(strFromFile);
  } catch(e) {
    return {};
  }
};

答案 1 :(得分:0)

FS模块

在NodeJS中进行开发时,有时需要访问计算机的文件系统。 FS Module是一个辅助此过程的实用程序。

FS包含一些功能,这些功能允许通过围绕API的包装在文件系统上完成不同的活动。

应该将其包含/必需/导入到需要与文件系统API交互的任何JS中。

var fs = require("fs");

这些是您可以在此API上使用的不同方法,它们都是异步的:

fs.readFile {fs.readFile('input.txt',function(err,data)

// Asynchronous read
fs.readFile('input.txt', function (err, data) {
   if (err) {
      return console.error(err);
   }
   console.log("Asynchronous read: " + data.toString());
});

fs.writeFile

fs.writeFile('input.txt', 'Simply Easy Learning!',  function(err) {
   if (err) {
      return console.error(err);
   }

   console.log("Data written successfully!");
   console.log("Let's read newly written data");
   fs.readFile('input.txt', function (err, data) {
      if (err) {
         return console.error(err);
      }
      console.log("Asynchronous read: " + data.toString());
   });
});

打开

// Asynchronous - Opening File
console.log("Going to open file!");
fs.open('input.txt', 'r+', function(err, fd) {
   if (err) {
      return console.error(err);
   }
  console.log("File opened successfully!");    
});

fs.stat(提供有关文件的信息),例如

fs.stat('input.txt', function (err, stats) {
   if (err) {
       return console.error(err);
   }
   console.log(stats);
   console.log("Got file info successfully!");

   // Check file type
   console.log("isFile ? " + stats.isFile());
   console.log("isDirectory ? " + stats.isDirectory());   
});

fs.read(类似于readFile,不应作为读取文件的首选)

fs.close

// Close the opened file.
fs.close(fd, function(err){
  if (err){
     console.log(err);
  }
     console.log("File closed successfully.");
});

ftruncate(截断打开的文件)

取消链接(删除打开的文件)

fs.unlink('input.txt', function(err) {
   if (err) {
      return console.error(err);
   }
   console.log("File deleted successfully!");
});

fs.mkdir(创建新目录)

fs.mkdir('/tmp/test',function(err){
   if (err) {
      return console.error(err);
   }
   console.log("Directory created successfully!");
});

fs.readdir(读取目录)

fs.readdir("/tmp/",function(err, files){
   if (err) {
      return console.error(err);
   }
   files.forEach( function (file){
      console.log( file );
   });
});

fs.rmdir(删除目录)

fs.rmdir("/tmp/test",function(err){
   if (err) {
      return console.error(err);
   }
   console.log("Going to read directory /tmp");

   fs.readdir("/tmp/",function(err, files){
      if (err) {
         return console.error(err);
      }
      files.forEach( function (file){
         console.log( file );
      });
   });
});

同步功能:

readFileSync

// Synchronous read
var data = fs.readFileSync('input.txt');
console.log("Synchronous read: " + data.toString());

writeFileSync

// Synchronous write
var data = fs.writeFileSync('input.txt', 'asdasdasd');

答案 2 :(得分:-1)

只需使用逐行打包读取,减少头痛,更少控制读取过程(可以暂停,恢复读取,关闭文件描述符按需,跳过N行),减少代码。

1)安装:

npm i --save line-by-line
npm i --save lodash

2)实施

var lineByLine = require('line-by-line'),
    _ = require('lodash'),
    path = require('path');


var lines = [];
var filePath = path.join(__dirname, "ditLogs", file);
var fileReader = new lineByLine(filePath);

fileReader.on('line', function(line) {
  line = JSON.parse(line);
  if(_.isPlainObject(line) && !_.isEmpty(line)) {
    lines.push(line);
  }

  // optional
  doSomethingWithLine(line);
});

function doSomethingWithLine(line) {
  // for example You can save to db or send to somewhere using request libary or just show in console
}

fileReader.on('error', function(error) {
  console.error(error);
  process.exit(-1);
});

fileReader.on('end', function() {
  doSomethingAfterParsingAllLines(lines);
});

function doSomethingAfterParsingAllLines(records) {
  // do something with data
}

答案 3 :(得分:-1)

'use strict';
const fs = require('fs');
let rawdata = fs.readFileSync('student.json');  
let student = JSON.parse(rawdata);  
console.log(student);