執行文件作爲變量我有一個文件,它的結構是這樣的:閱讀和的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