2016-01-11 457 views
0

即時嘗試將字符串轉換爲對象。我看着它,一切都說使用JSON.parse或eval。然而,當我嘗試這些方法,我的程序失敗,我檢查調試器,並說我有一個無效的表達式:意想不到的令牌k。誰能幫我嗎?將對象字符串轉換爲JSON/js對象時出錯

router.post('/insertData', function (req, res) { 
    var databaseName = req.body.DB , collection = req.body.collection, newData = req.body.data ; 
    var test = JSON.parse(newData); 
    var db = new Db(databaseName, new Server('localhost', 27017)); 
    db.open(function (err, db) { 
     // Insert a document in the capped collection 
     db.collection(collection).insert(test, { w: 1 }, function (err, result) { 

enter image description here

+0

那是什麼形象應該是什麼?如果「{key:value}」是'newData'的實際值,那麼它將不會JSON.parse或eval –

回答

0

JSON,短爲JavaScript對象表示法,是一種輕質,語言無關的數據交換格式。爲了在JSON字符串上使用JSON.parse,該字符串需要是有效的JSON。 "{key:value}"不是有效的JSON字符串,因此解析器會引發錯誤。

首先,在JSON的目標是一組無序名稱/值對,其中該名稱是一個並且該值可以是一個對象陣列truefalsenull

有趣的是JSON如何定義一個字符串:

字符串是雙引號括起來的零個或多個Unicode字符序列,

那麼,你的字符串"{key:value}"有什麼問題?那麼,key不是一個字符串,所以解析器在到達「k」時立即拋出一個錯誤。另外,一旦我們修復了key,你會發現value也沒有任何意義。您需要在此處傳遞實際值(字符串,數字,對象,數組值或true,false,null,如上所述)。

所以,相反,你會想是這樣的:

var newData = '{"key":12345}'; 
var test = JSON.parse(newData); 
console.log(test.key); // 12345 
+0

不,它會在解析時給出錯誤。根本不會這麼做 – John

+0

我知道。我的回答指出你需要給它「有效的JSON」。我提供的代碼片段很有用,所以你需要確保你的'newData'是一個_valid JSON字符串',你提供的值(''{key:value}'')不是。然而,我提供的價值是('{「key」:12345}')。您需要修復您的JSON字符串以正確解析它。 – rgthree

+0

以及我必須通過它作爲一個字符串。 「{key:value}」,因爲我通過路由傳遞它。那麼我如何解析它到一個有效的json對象呢? – John