执行文件作为变量我有一个文件,它的结构是这样的:阅读和的NodeJS
({
foo: 'bar',
bar: 'foo'
})
我试图加载和NodeJS
阅读文件,这样就可以得到object
作为一个变量;最好的办法是什么? 注意我不能改变文件的结构。
执行文件作为变量我有一个文件,它的结构是这样的:阅读和的NodeJS
({
foo: 'bar',
bar: 'foo'
})
我试图加载和NodeJS
阅读文件,这样就可以得到object
作为一个变量;最好的办法是什么? 注意我不能改变文件的结构。
你可以文件读入到一个字符串,并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]+
部分,匹配任何东西都包括换行符。 \(
和\)
部分与周围的括号匹配。
我会避免评估。尝试
JSON.parse()
改为。
嗯这似乎并没有因为当我这样做的工作:'JSON.parse(({ \t富: '棒', \t吧: '富' \t}))',它会报告错误:( – 2013-02-22 18:28:47
+1为JSON.parse。编辑我的答案,包括该替代方案以及所需的删除额外的parens。 – nimrodm 2013-02-22 19:16:47
Ah'eval',我希望避免这种情况,因为我的同事可能会笑,嘲讽,并且通常会为项目的其余部分开玩笑。 – 2013-02-22 12:45:12
使用eval是不好的建议。改为使用JSON.parse()。 – mtsr 2013-02-22 15:11:29
'JSON.parse()'不能处理额外的括号。当然,如果这是问题,可以手动从字符串中去掉它们,然后通过'JSON.parse()'处理结果。 – nimrodm 2013-02-22 16:36:48