将Node.js对象设置为从文件读取的数据

时间:2016-03-13 00:02:29

标签: javascript node.js object readfile fs

我想从文件中读取数据并将其添加到存储在内存中的对象中。 text.txt文件中的数据大致如下:

One: {title: 'One' ,
contributor: 'Fred',
summary: 'blah' ,
comments: 'words' },

Two: {title: 'Two' ,
contributor: 'Chris' ,
summary: 'blah blah i'm a blah' ,
comments: '' },

我试图将它设置为空对象,如下所示:

var fs = require('fs');
var text = Object.create(null);
fs.readFile("./public/text.txt", "utf-8", function(error, data) {
  text = { data };
});

但是,当我将text记录到控制台时,它看起来像这样:

{ data: 'One: {title: \'One\' ,\ncontributor: \'Fred\',\nsummary: \'blah\' ,\ncomments: \'words\' },\n    \nTwo: {title: \'Two\' ,\ncontributor: \'Chris\' ,\nsummary: \'blah blah i\'m a blah\' ,\ncomments: \'\' },\n\n' }

显然,它正在阅读data作为关键。但是,我真正想要的更像是:

{
  One: {title: 'One' ,
  contributor: 'Fred',
  summary: 'blah' ,
  comments: 'words' },

  Two: {title: 'Two' ,
  contributor: 'Chris' ,
  summary: 'blah blah i'm a blah' ,
  comments: '' },
}

这里的任何建议都会非常感激。

2 个答案:

答案 0 :(得分:3)

如果您使用的是较新版本的Node,则表示您支持ES6。

// So your code 
`text = { data }` 

// is actually a shortcut for 
`text = { data: data }`

这就是为什么你最终得到一个具有关键数据的对象,其值是文件中找到的字符串版本。相反,只需在数据参数(字符串)上使用JSON.parse,然后将其转换为Object,您可以将其存储在文本中。喜欢这个

var fs = require('fs');
var text = Object.create(null);
fs.readFile("./public/text.txt", "utf-8", function(error, data) {
  text = JSON.parse(data);
});

您还需要使文件有效json。这意味着键需要像String值一样引用它们。

{
  "One": {
    "title": "One" ,
    "contributor": "Fred",
    "summary": "blah" ,
    "comments": "words"
  },

  "Two": {
    "title": "Two" ,
    "contributor": "Chris" ,
    "summary": "blah blah i'm a blah" ,
    "comments": ""
  }
}

答案 1 :(得分:0)

您要做的是使用eval,如果您真的不想将文件编辑为有效的JSON或导出@Spidy建议的对象,这是唯一的方法。请确保该文件是有效的JavaScript,因为您提供的示例有

summary: 'blah blah i'm a blah'

但你需要像i'm一样逃避i\'m

var fs = require('fs');
var text = {};
fs.readFile('./public/text.txt', 'utf-8', function (error, data) {
  eval(`text = {${data}}`);
//eval('text = {' + data + '}');
});

但我不一定会建议,因为这允许任意javascript被执行。根据文件中的数据如何到达那里,这将是一个巨大的安全风险。