2013-02-22 83 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