Setting a Node.js Object to data read from a file
我想从文件中读取数据,并将其添加到存储在内存中的对象中。text.txt文件中的数据大致如下:
1 2 3 4 5 6 7 8 9 | One: {title: 'One' , contributor: 'Fred', summary: 'blah' , comments: 'words' }, Two: {title: 'Two' , contributor: 'Chris' , summary: 'blah blah i'm a blah' , comments: '' }, |
我试着把它设置成这样一个空的物体:
1 2 3 4 5 | var fs = require('fs'); var text = Object.create(null); fs.readFile("./public/text.txt","utf-8", function(error, data) { text = { data }; }); |
但是,当我把
1 2 3 4 5 6 7 8 9 10 11 | { data: 'One: {title: \'One\' , contributor: \'Fred\', summary: \'blah\' , comments: \'words\' }, Two: {title: \'Two\' , contributor: \'Chris\' , summary: \'blah blah i\'m a blah\' , comments: \'\' }, ' } |
显然,它把
1 2 3 4 5 6 7 8 9 10 11 | { One: {title: 'One' , contributor: 'Fred', summary: 'blah' , comments: 'words' }, Two: {title: 'Two' , contributor: 'Chris' , summary: 'blah blah i'm a blah' , comments: '' }, } |
这里的任何建议都将不胜感激。
如果您使用的是较新版本的节点,则支持ES6。
1 2 3 4 5 | // So your code `text = { data }` // is actually a shortcut for `text = { data: data }` |
这就是为什么您最终会得到一个包含键数据的对象,并且该值是在文件中找到的字符串版本。相反,只需在数据参数(字符串)上使用json.parse,它就会将其转换为一个对象,您可以将其存储在文本中。这样地
1 2 3 4 5 | var fs = require('fs'); var text = Object.create(null); fs.readFile("./public/text.txt","utf-8", function(error, data) { text = JSON.parse(data); }); |
您还需要使文件成为有效的JSON。这意味着键和字符串值都需要引号。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | { "One": { "title":"One" , "contributor":"Fred", "summary":"blah" , "comments":"words" }, "Two": { "title":"Two" , "contributor":"Chris" , "summary":"blah blah i'm a blah" , "comments":"" } } |
您要做的是使用
1 | summary: 'blah blah i'm a blah' |
但你需要像躲避江户记1(2)一样逃离江户记1(1)。
1 2 3 4 5 6 | var fs = require('fs'); var text = {}; fs.readFile('./public/text.txt', 'utf-8', function (error, data) { eval(`text = {${data}}`); //eval('text = {' + data + '}'); }); |
但我不一定建议这样做,因为这样可以执行任意的javascript。根据文件中的数据如何到达那里,这将是一个巨大的安全风险。