2015-04-21 58 views
1

我是Node.js初學者,我試圖讀取json文件,但是當我在終端中運行'npm start'時,出現此錯誤:無法解析Node.js中的JSON

undefined:3462 

SyntaxError: Unexpected end of input 
    at Object.parse (native) 
    at /Users/alonbond/node_apps/analoc_2/analoc/routes/index.js:15:20 
    at fs.js:334:14 
    at FSReqWrap.oncomplete (fs.js:95:15) 

這是index.js:

var express = require('express'); 
var fs = require('fs'); 
var app = express.Router(); 

/* GET home page. */ 
app.get('/', function(req, res, next) { 
    console.log('Welcome to Express.js'); 
    res.render('index', { title: 'Express' }); 
}); 

/* GET json */ 
app.get('/analoc/', function(req, res) { 

    fs.readFile('./sample_data.json', function(error, data){ 
     jsonObj = JSON.parse(data); 
     res.send('THE DATA: ', jsonObj); 
    }); 

}); 

module.exports = app; 
+1

也許你可以嘗試/測試,如果你有一個有效的JSON第一位置http://jsonlint.com/如果你有無效的json,它會給出更好的錯誤信息 – Hokutosei

+0

你還應該聲明你的變量(jsonObj),並在數據上加上一個console.log()來檢查。 – enguerranws

+2

檢查是否設置了錯誤... – robertklep

回答

2

您的代碼工作正常,我。您的JSON文件在某種程度上必須是錯誤的。

下面這個使用代碼的例子:

無效JSON:

{ 
    "test_data": 2 
    bla 
} 

給出了錯誤

Example app listening at http://:::3000 
undefined:3 
     bla 
     ^
SyntaxError: Unexpected token b 
    at Object.parse (native) 
    at /tmp/node_help/index.js:15:32 
    at fs.js:334:14 
    at FSReqWrap.oncomplete (fs.js:95:15) 

Unexpected end of input缺少大括號或小括號的時候是正常的錯誤你的JSON文件。

這是一個無效的sample_data.json(末尾缺少一個大括號):

{ 
    "test_data": 2 

這給錯誤

SyntaxError: Unexpected end of input 
    at Object.parse (native) 
    at /tmp/node_help/index.js:15:32 
    at fs.js:334:14 
    at FSReqWrap.oncomplete (fs.js:95:15) 
+0

謝謝!顯然,我的json文件的結尾是缺少一些括號。 –