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

我想从文件读取数据并将其添加到存储在内存中的对象。 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 }; }); 

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

 { data: 'One: {title: \'One\' ,\ncontributor: \'Fred\',\nsummary: \'blah\' ,\ncomments: \'words\' },\n \nTwo: {title: \'Two\' ,\ncontributor: \'Chris\' ,\nsummary: \'blah blah i\'ma 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: '' }, } 

任何意见在这里将不胜感激。

如果您使用的是更新版本的Node,那么您将支持ES6。

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

这就是为什么你最终得到一个具有关键数据的对象,并且该值是文件中发现的string版本。 相反,只需在数据参数(这是一个string)上使用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": "" } } 

你想要做的是使用eval ,这是唯一的方法,如果你真的不想编辑文件是有效的JSON或导出一个对象作为@Spidybuild议。 只要确定该文件是有效的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 + '}'); }); 

但我不一定build议,因为这允许任意的JavaScript来执行。 取决于文件中的数据如何到达那里,这将是一个巨大的安全风险。