将 Node.js 对象设置为从文件读取的数据
Setting a Node.js Object to data read from a file
我想从文件中读取数据并将其添加到存储在内存中的对象中。文件 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: '' },
}
如有任何建议,我们将不胜感激。
如果您使用的是较新版本的 Node,则支持 ES6。
// So your code
`text = { data }`
// is actually a shortcut for
`text = { data: data }`
这就是为什么您最终得到一个对象,该对象具有关键数据并且该值是在文件中找到的内容的字符串版本。相反,只需在数据参数(字符串)上使用 JSON.parse,它会将其转换为对象,您可以将其存储在文本中。像这样
var fs = require('fs');
var text = Object.create(null);
fs.readFile("./public/text.txt", "utf-8", function(error, data) {
text = JSON.parse(data);
});
您还需要使文件有效 json。这意味着键和字符串值一样需要引号。
{
"One": {
"title": "One" ,
"contributor": "Fred",
"summary": "blah" ,
"comments": "words"
},
"Two": {
"title": "Two" ,
"contributor": "Chris" ,
"summary": "blah blah i'm a blah" ,
"comments": ""
}
}
您尝试做的是使用 eval
,如果您真的不想编辑文件以使其有效 JSON 或将对象导出为 @,这是唯一的方法斯皮迪建议道。请确保文件有效 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 被执行。根据文件中数据到达那里的方式,这将带来巨大的安全风险。
我想从文件中读取数据并将其添加到存储在内存中的对象中。文件 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: '' },
}
如有任何建议,我们将不胜感激。
如果您使用的是较新版本的 Node,则支持 ES6。
// So your code
`text = { data }`
// is actually a shortcut for
`text = { data: data }`
这就是为什么您最终得到一个对象,该对象具有关键数据并且该值是在文件中找到的内容的字符串版本。相反,只需在数据参数(字符串)上使用 JSON.parse,它会将其转换为对象,您可以将其存储在文本中。像这样
var fs = require('fs');
var text = Object.create(null);
fs.readFile("./public/text.txt", "utf-8", function(error, data) {
text = JSON.parse(data);
});
您还需要使文件有效 json。这意味着键和字符串值一样需要引号。
{
"One": {
"title": "One" ,
"contributor": "Fred",
"summary": "blah" ,
"comments": "words"
},
"Two": {
"title": "Two" ,
"contributor": "Chris" ,
"summary": "blah blah i'm a blah" ,
"comments": ""
}
}
您尝试做的是使用 eval
,如果您真的不想编辑文件以使其有效 JSON 或将对象导出为 @,这是唯一的方法斯皮迪建议道。请确保文件有效 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 被执行。根据文件中数据到达那里的方式,这将带来巨大的安全风险。