當選用http://www.json.org/ 提供的 json2.js ,搭配 ASP.NET 進行資料溝通時,會發現由 ASP.NET回傳的物件如果包含有日期物件時,json2.js 的 JSON.parse() 解析功能會出錯。
經追蹤結果:
日期物件在 .NET 端利用 JSON.toJSON(物件) 進行序列化時,會被轉成 new Date(毫秒值) 的字串,當此字串傳給前端 json2.js 的 JSON.parse(字串)時,在462 到 465行的地方執行之後,會引發錯誤
if (/^[\],:{}\s]*$/.test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@')
.replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']').replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) {
只要再463行之後再加入 .replace(/new Date\([0-9]*\)/ig,'') 即可。
因為原來的 RegExp取代並不會算到 new Date(),所以 /^[\],:{}\s]*$/.test 結果永遠為 false,加入 .replace(/new Date\([0-9]*\)/ig,'') 之後
if (/^[\],:{}\s]*$/
.test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@')
.replace(/new Date\([0-9]*\)/ig,'')
.replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']')
.replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) {
就可以讓 new Date(...) 也可通知 test
沒有留言:
張貼留言