2013-02-22 60 views
0

执行文件作为变量我有一个文件,它的结构是这样的:阅读和的NodeJS

({ 
    foo: 'bar', 
    bar: 'foo' 
}) 

我试图加载和NodeJS阅读文件,这样就可以得到object作为一个变量;最好的办法是什么? 注意我不能改变文件的结构。

回答

2

你可以文件读入到一个字符串,并eval该字符串:

var fs = require('fs'); 
var s = readFileSync('myfile.js', 'utf8'); 
x = eval(s); 

如果有必要,你可以调用eval之前修改字符串s

我不得不同意mtsr使用JSON.parse的解决方案更好(无论是在安全性方面还是在性能方面)。但是,由于围绕对象字面值的额外括号,当前数据文件不表示JSON结构。

如果你确信对象字面{..}总是由(..)对环绕,你可以将其删除,然后尝试解析字符串:

m = s.match(/\(([\s\S]+)\)/); 
x = JSON.parse(m[1]); 

正则表达式的[\s\S]+部分,匹配任何东西都包括换行符。 \(\)部分与周围的括号匹配。

+0

Ah'eval',我希望避免这种情况,因为我的同事可能会笑,嘲讽,并且通常会为项目的其余部分开玩笑。 – 2013-02-22 12:45:12

+0

使用eval是不好的建议。改为使用JSON.parse()。 – mtsr 2013-02-22 15:11:29

+0

'JSON.parse()'不能处理额外的括号。当然,如果这是问题,可以手动从字符串中去掉它们,然后通过'JSON.parse()'处理结果。 – nimrodm 2013-02-22 16:36:48

1

我会避免评估。尝试

JSON.parse() 

改为。

+0

嗯这似乎并没有因为当我这样做的工作:'JSON.parse(({ \t富: '棒', \t吧: '富' \t}))',它会报告错误:( – 2013-02-22 18:28:47

+0

+1为JSON.parse。编辑我的答案,包括该替代方案以及所需的删除额外的parens。 – nimrodm 2013-02-22 19:16:47