Javascript JSON日期序列化

前端之家收集整理的这篇文章主要介绍了Javascript JSON日期序列化前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图反序列化一个在其中有一个 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;
  }
};

jsbin可提供现场示例.gist提供了参考.

原文链接:https://www.f2er.com/js/151344.html

猜你在找的JavaScript相关文章