当前位置: 首页 > 面试题库 >

Javascript JSON日期反序列化

牟波
2023-03-14
问题内容

我正在尝试反序列化具有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。在构建javascript对象时,是否有任何js库可以正确反序列化日期?


问题答案:

我接受@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上有参考资料。



 类似资料:
  • 奇怪的是下面的测试用例会失败。有人知道为什么吗?

  • 问题内容: 给定以下JSON Date表示形式: 您如何将其反序列化为JavaScript Date类型的形式? 我尝试使用MS AJAX JavaScrioptSerializer,如下所示: 但是,我得到的只是文字字符串日期。 问题答案: 如果您知道该字符串绝对是我更喜欢这样做的日期:

  • 无法从字符串“1979-12-05T08:00Z”反序列化java.util.Date类型的值:无效表示(错误:无法分析日期值“1979-12-05T08:00Z”:无法分析日期“1979-12-05T08:00.000Z”:虽然它似乎符合格式“yyyy-mm-dd't'hh:mm:ss.sss'z'',但分析失败 到目前为止,我试图包含这种依赖关系: 还有: 但没有奏效。

  • 问题内容: 我从ExtJS获取日期字符串,其格式为: “ 2011-04-08T09:00:00” 当我尝试反序列化此日期时,它将时区更改为“印度标准时间”(该时间增加+5:30)。这就是我反序列化日期的方式: 这样做也不会更改时区。我仍然在IST中得到日期: 如何以无时区麻烦的日期反序列化日期? 问题答案: 我找到了解决方法,但与此同时,我需要在整个项目中注释每个日期的设置器。有没有一种方法可以

  • 我对jackson进行了配置,以便在和时给出一个简单的字符串表示。这可以在序列化过程中找到,例如,当我在REST API上获得数据时。 但反过来就不行了。当我试图将数据发送到服务器,并且应该将JSON解析为java对象时,会引发此异常: 很抱歉没有提到我在单元测试中。 TestClass:

  • 我正在尝试使用stackexchange API。在这个链接中,我试图得到一些用户的信息。 如果您运行,您将得到JSON响应。