2011-06-08 57 views
0

我想解析一個大的json文件(240'000字符)使用JavaScript。我使用ajax從servlet中檢索json數據。我使用的代碼可以在較小的樣本中正常工作,但當xmlHttp.responseText包含大量的json數據時就會拋出這個問題。問題解析大型json使用eval和替代

Uncaught SyntaxError: Unexpected token ILLEGAL 
mycallbackFunction 
xmlHttp.onreadystatechange 

上面說的是意外的標記是在對含有

var data = eval('(' + xmlHttp.responseText + ')'); 

這行是代碼的主旨:

getJsonData(mycallbackFunction, parameters); 

function getJsonData(callbackFunction, parameters){ 
    var xmlHttp = new XMLHttpRequest(); 

    xmlHttp.open('GET', servlet_url + parameters, true); 
    xmlHttp.onreadystatechange = function(){ 
     callbackFunction(xmlHttp); 
    } 
    xmlHttp.setRequestHeader('Content-Type', 'application/json'); 
    xmlHttp.send(null); 
} 

function mycallbackFunction(xmlHttp){ 
    var data = eval('(' + xmlHttp.responseText + ')'); 
} 

使用的eval()的方法,是從稱爲xmlHttp.onreadystatechange如果有什麼區別。

我也使用json2.js嘗試和得到相同的結果,它工作正常較小JSON樣本,但是當我試圖用我的240K字符文件,它說:

Uncaught #<Object> 

在此先感謝。

+0

您是否嘗試過使用瀏覽器的原生JSON解析功能而不是'eval()'? – 2011-06-08 13:47:06

+3

不會是這個問題的大小 - 你在那裏有格式不正確的JSON。 – BonyT 2011-06-08 13:48:13

+2

@BonyT說得很好。 http://jsonlint.com中的JSON是否有效? (如果它可以處理240k的數據) – 2011-06-08 13:48:54

回答

1

您應該使用

var data = JSON.parse(xmlHttp.responseText); 

爲了確保JSON解析器可以在瀏覽器中不提供一個(咳嗽 IE 咳嗽),你應該包括道格拉斯Crockford的json2.js頁面上領先於其他腳本。

如果數據分析器錯誤,您應該通過類似http://jsonlint.com/的方式驗證JSON的問題。如果您需要,您應該將數據分解爲驗證站點的較小塊。

此外,爲確保您的JSON是有效的,你應該使用合適的JSON序列化方法在服務器上,而不是「手動」通過回聲,打印輸出等

+0

謝謝你的回答。問題不在於解析,而在於錯誤的數據。我會爲它創建另一個問題。 – 2011-06-09 08:08:25