将 Node.js 对象设置为从文件读取的数据
Posted
技术标签:
【中文标题】将 Node.js 对象设置为从文件读取的数据【英文标题】:Setting a Node.js Object to data read from a file 【发布时间】:2016-06-28 03:41:05 【问题描述】:我想从文件中读取数据并将其添加到存储在内存中的对象中。文件 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: '' ,
这里的任何建议将不胜感激。
【问题讨论】:
真正简单:只需使用JSON.parse(data);
。查看副本:Using Node.JS, how do I read a JSON object into (server) memory?
我尝试了那个解决方案。当我这样做时,我得到Syntax Error: Unexpected token O
我突然想到,解决该语法错误的一种可能方法是将 text.txt 文件中的所有内容包含在一些
大括号内。这给我带来了一些困难;有什么办法可以避免吗?
问:Syntax Error: Unexpected token O
。 A:那么你的Json文件是非法的。建议:确保您有...
分隔最外层的“数据”节点。您发布的问题的答案是“使用 JSON.parse()”。您的语法错误的答案是“修复您的 JSON 文件”。
【参考方案1】:
如果您使用的是较新版本的 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": ""
【讨论】:
查看我对这个问题的评论。 抱歉,你用其他问题更新了我的答案 呃.... 哎呀,这可能是我能得到的最好的了。公平的解决方案。我将保持开放状态,看看是否有人提出一种方法来做到这一点而不用括号括起来。 您可以使用 require() 将其加载为 javascript 文件,但您需要添加一行用于导出 或者使用更好的扩展文件系统,如 fs-extra 或 node-jsonfile,但你会注意到他们只是为你做:github.com/jprichardson/node-jsonfile/blob/master/index.js#L14【参考方案2】:您要做的是使用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。取决于文件中的数据如何到达那里,这将是一个巨大的安全风险。
【讨论】:
以上是关于将 Node.js 对象设置为从文件读取的数据的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Node JS 中读取文本文件并将其作为 JSON 对象返回?
你怎么得到运行Node.js脚本的cron作业从.env文件中读取变量?
如何使用 HTML 输入文件导入 excel 文件并在 Node.js 中读取文件内容(如何将完整路径发送到 Node.js)