我试图反序列化一个在其中有一个
javascript日期的json对象.当对象上调用
JSON.stringify时,日期将被序列化为未正确反序列化的字符串.我试图使用chrome,IE和FF的本机浏览器实现并使用jquery来反序列化对象.两者都给出了一些结果.这是代码段:
var obj = {Date: new Date()}; var objSer = JSON.stringify(obj); var objDeser = JSON.parse(objSer); var objJqDeser = $.parseJSON(objSer); function getYear(value){ try{ return value.getYear(); } catch(err){ return err; } } $("#orig").text("Orig Year: " + getYear(obj.Date)); $("#deser").text("Deser Year: " + getYear(objDeser.Date)); $("#jqDeser").text("JqDeser Year: " + getYear(objJqDeser.Date));
我想要objDeser.Date成为一个js日期不是一个字符串.您可以在此处看到此问题:http://jsbin.com/unijud/24/edit.是否有任何js库可以正确反序列化构建JavaScript对象的日期?
解决方法
我采取了@LastCoder的建议,并写了一个简单的实现.它似乎在做我想要的.
var jsonDates = { dtrx2: /\d{4}-\d{2}-\d{2}/,parse: function(obj){ var parsedObj = JSON.parse(obj); return this.parseDates(parsedObj); },parseDates: function(obj){ // iterate properties for(pName in obj){ // make sure the property is 'truthy' if (obj[pName]){ var value = obj[pName]; // determine if the property is an array if (Array.isArray(value)){ for(var ii = 0; ii < value.length; ii++){ this.parseDates(value[ii]); } } // determine if the property is an object else if (typeof(value) == "object"){ this.parseDates(value); } // determine if the property is a string containing a date else if (typeof(value) == "string" && this.dtrx2.test(value)){ // parse and replace obj[pName] = new Date(obj[pName]); } } } return obj; } };