2012-02-16 23 views
0

我得到一個JSON字符串通過彗星請求。該字符串如下:jquery插件沒有正確轉換JSON字符串

"{"tab":2,"changedData":{"from":{"line":20,"ch":0},"to":{"line":20,"ch":0},"text":["a"]},"cmd":"copyChunk","timestamp":1329409543902,"person":{"comradeID":"4ef37369b4812","firstName":"","lastName":"","fullName":"ben team2","nickName":"ben t.","messageCount":0,"email":"[email protected]","lastPing":1329409537308,"sessionLeader":true,"cursorPosition":{"line":0,"ch":0}}}" 

我運行它通過的jQuery插件JSON:

var r = $.evalJSON(jsonstring); 

但它不會正確地轉換 「changeData」 對象。它的其餘部分都工作,但changedData.from.line和changedData.to.line都導致NaN。

我也試着發送changedData.from.line作爲一個字符串,然後使用

Number(changedData.from.line) 

將其轉換回數字,但它仍然返回NaN。我幾乎肯定20是一個數字,但我以前錯了。

在此先感謝。

更新:

我道歉,在開始和結束的報價實際上不是字符串的一部分。複製/粘貼的陷阱。

這是在上下文中的代碼:

onMessage : function(frame) 
{ 
    //This function calls the handlers. 
    //this is fired every time we recieve a message from orbited 
    //this is what calls the handler functions 
    //body is a json string containing whatever data was sent via the send() function 

    delete r; 
    //convert the body to an object 
    var r = $.evalJSON(frame.body); 

其中「frame.body」是上面貼不帶引號的字符串。

+0

你上面的代碼是無效的js語法;它有「在開始/結束和內部標記; JSON是有效的語法,所以這不可能正是你所接受的。另外,我認爲你會發現問題在於數據的一些處理,所以我們肯定需要更多的代碼和上下文 – Kato 2012-02-16 16:50:31

+0

您確定您使用的是jQuery?函數evalJSON()是一個原型函數(http://www.prototypejs.org/api/string/evalJSON)在jQuery ,相當於.parseJSON()。另外,如果它是一個格式不正確的字符串,evalJSON()將返回錯誤,所以它必須是你如何處理數據。 – Jlange 2012-02-16 17:03:59

+0

我使用jQuery插件jquery這裏:http://code.google.com/p/jquery-json/另外,parseJSON()也做同樣的事情 – user1052474 2012-02-16 17:06:50

回答

0

前後引號"無效。

1

錯誤是其他地方。使用parseJSON作品完美地與字符串你給http://jsfiddle.net/mendesjuan/qG6Qv/1/

var str = '{"tab":2,"changedData":{"from":{"line":20,"ch":0},"to":{"line":20,"ch":0},"text":["a"]},"cmd":"copyChunk","timestamp":1329409543902,"person":{"comradeID":"4ef37369b4812","firstName":"","lastName":"","fullName":"ben team2","nickName":"ben t.","messageCount":0,"email":"[email protected]","lastPing":1329409537308,"sessionLeader":true,"cursorPosition":{"line":0,"ch":0}}}'; 

var json = $.parseJSON(str); 
alert(json.changedData.from.line); //outputs 20 

這可能是因爲你的問題是,你要指定parseJSON返回給一個變量r,然後你要做的Number(changedData.from.line)。沒有變量叫changedData