将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 }; });
但是,当我将text
logging到控制台时,它看起来像这样:
{ 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来执行。 取决于文件中的数据如何到达那里,这将是一个巨大的安全风险。