2015-11-06 58 views
0

我想將字符串轉換爲json對象,但每次我嘗試我得到錯誤。以下是我的字符串格式。我所做的只是將下面的字符串格式傳遞給JSON.parse函數,但它不起作用。如果我像「1/1/2014」而不是日期對象那樣傳遞了真正的字符串,它就可以很好地工作。我應該怎麼做才能安全地進行json轉換。將字符串轉換爲json與字符串上的日期對象

"[{ \"ID\": 0, \"ApplyDate\": new Date(2011, 0, 3, 0, 0, 0, 0), 
\"Phy\":37.74,\"Eng\": 40, \"Chem\": 37.62, \"math\": 39.17 },{ \"ID\": 1, 
\"ApplyDate\": new Date(2010, 11, 1, 0, 0, 0, 0), \"Phy\": 37.15, \"Eng\": 
37.99, \"Chem\": 36.51, \"math\": 37.51 }]"; 

回答

0

你應該先轉換DateString然後編碼您json

new Date().toString(); //"Fri Nov 06 2015 19:37:51 GMT+0100" 

您可以更改的Date格式與

var date = new Date(); 
date.format() //the format 

Here一個方法來獲得一個yyyymmdd格式

所以,如果你有對象

var object = { date: theDate }; 
object.date = object.date.toString(); 
var json = JSON.stringify(object.date); 
+0

他也沒有逃避一些引號。 –

+0

我猜想它的錯誤轉換結果 – steo

+0

這個字符串流來自服務器端。有沒有辦法只選擇客戶端轉換該領域迄今?如果是這樣,我該怎麼做? – LilRazi

1

這不是JSON,所以,JSON.parse不能幫你...

順便說一句:

  1. 的標識第一個目的是沒能逃脫,
  2. 新的日期(唧唧歪歪)不是JSON,至少你應該通過類似的東西"new Date(2011, 0, 3, 0, 0, 0, 0)"

獲得一個約會的最佳方式,如果你是愛你的代碼編碼作爲一個字符串...

(new Date()).toString(); 

,儘量包裹Date對象作爲一個字符串,然後exec的一個eval。 ..

var a = eval("new Date()") 
1

因爲它是我不認爲有任何其他方式比eval()。主要的問題是,sourcestring不是有效的JSON,而是類似字面結構,它已經通過某種字符串轉義。

所以先卸下逃逸,s是從OP字符串:

s = s.replace("\\", ""); 

它轉換(回來?)與eval()文字:

var literal = eval(s); 

現在Date對象中創建的文本的實際工作:

console.log(literal[0].ApplyDate.getFullYear()); 

輸出2011

演示 - >http://jsfiddle.net/hv7ar3qr/


現在,你可以把literal回一個有效的JSON字符串

var json = JSON.stringify(literal); 

json看起來就像這樣:

[ 
    { 
     "ID": 0, 
     "ApplyDate": "2011-01-02T23:00:00.000Z", 
     "Phy": 37.74, 
     "Eng": 40, 
     "Chem": 37.62, 
     "math": 39.17 
    }, 
    { 
     "ID": 1, 
     "ApplyDate": "2010-11-30T23:00:00.000Z", 
     "Phy": 37.15, 
     "Eng": 37.99, 
     "Chem": 36.51, 
     "math": 37.51 
    } 
] 

JSON.parse(json)可以用來打開json成一個迭代JSON對象。要走很長的路,第一步需要是eval()