2014-01-29 98 views
2

我有以下的JSON:奇怪的JSON解析錯誤

{ 
    "request" : { 
     "language" : "en", 
     "title" : "placeholder", 
     "year" : "2014" 
    } 
} 

我試着用下面的代碼解析:

var json = require('../filename); 

奇怪的是,我接收SyntaxError

/home/username/code/filename:2 
    "request" : { 
      ^
SyntaxError: Unexpected token : 
(...) 

根據JSONLint JSON是完全有效的。我錯過了非常明顯的東西嗎?

+0

http://stackoverflow.com/questions/13588747/uncaught-syntaxerror-unexpected-token – user2864740

回答

6

這聽起來像您製作了.js文件,而不是.json文件。
因此,它被解析爲Javascript,而不是JSON。

+0

啊,沒想到這一點。我的文件實際上沒有文件擴展名。有什麼辦法強制require()將文件視爲JSON文件嗎?要求我使用.json擴展名似乎與UNIX世界中的慣例不同。 – haroba

+0

@Aqwis:文檔只說*「'.js'文件被解釋爲JavaScript文本文件,'.json'文件被解析爲JSON文本文件」* –

+0

@Aqwis除了requirejs可以 - 但它確實*不* - 嘗試猜測文件的內容,它沒有其他的東西繼續.. – user2864740

0

(編輯)感謝@Aqwis用於察覺我

爲了解析JSON更好use JSON.parse like these thread shows

+3

不,自2011年以來,require已能解析JSON。 – haroba

+1

從您鏈接到的文檔:*「'.js '文件被解釋爲JavaScript文本文件,'.json'文件被解析爲JSON文本文件「*」。下一次,如果您已經鏈接到一些文檔,請確保您事先徹底閱讀;) –

6

require()不應該用於加載JSON文件。它僅用於加載node.js模塊,而不用於數據。根據擴展加載數據已被棄用(請參閱關於require.extensions的無數討論)。

所以加載JSON正確的方法是這樣的:

JSON.parse(require('fs').readFileSync(__dirname + '/filename', 'utf8'))