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

Setting a Node.js Object to data read from a file

本文关键字:文件 读取 数据 节点 js 对象 设置      更新时间:2023-09-26

我想从文件中读取数据并将其添加到存储在内存中的对象中。文件文本中的数据.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,它就会将其转换为 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。这意味着键需要像字符串值一样在它们周围加上引号。

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

您要做的是使用 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。根据文件中的数据如何到达那里,这将是一个巨大的安全风险。