使用

时间:2017-04-30 13:47:48

标签: json

我有一个json文件,其中包含日期(对象)的信息,但我无法格式化文件以便正确提取信息。

JSON文件:

[
  {
    "date": "new Date(1430539204557)",
    "score": 0
  },
  {
    "date": "new Date(1431144004557)",
    "score": 0
  },
  {
    "date": "new Date(1431748804557)",
    "score": 0
  }
]

即使这通过了json验证,但是当我在我的页面中显示这些数据时 - 而不是2015年9月到2015年10月 - 它显示了"新日期(1431748804557)"。我提取日期数据错了吗?

this.dateDisplay = this.data.map(item => item.date);

3 个答案:

答案 0 :(得分:1)

如果要获取每个[date]值,可能需要使用eval()(这是不安全的)将这些值作为“方法”或“实例化新的Date类”来提供。

var aData = [
    {
        "date": "new Date(1430539204557)",
        "score": 0
    },
    {
        "date": "new Date(1431144004557)",
        "score": 0
    },
    {
        "date": "new Date(1431748804557)",
        "score": 0
    }
];

aData.forEach(function(oProperty) {
    var oDate = eval(oProperty.date);
    console.log(oDate); // Sat May 02 2015 12:00:04 GMT+0800 (PHT)
});

虽然将[date]值作为实际日期值返回会更好。希望这对您的情况有所帮助。

答案 1 :(得分:0)

一些观察结果:

  • 根据OP,new Date(XXXXXXXXXXX)表现得像字符串而不是对象。
  • JSON中,只需传递epoch time(UNIX时间),然后在解析JSON时创建日期。

DEMO

答案 2 :(得分:-1)

您应该删除日期值的双引号。 示例代码生成用于处理的json文件: https://jsfiddle.net/2epL7b6d/

var str = [{
"date": new Date(1430539204557),
"score": 0
},
{
"date": new Date(1430539204557),
"score": 0
},
{
"date": new Date(1430539204557),
"score": 0
}];
var fileStr = JSON.stringify(str);
console.log(fileStr);

saveFile('yourfilename.json', "data:application/json", new Blob([fileStr],{type:""}));

function saveFile (name, type, data) {
    if (data != null && navigator.msSaveBlob)
        return navigator.msSaveBlob(new Blob([data], { type: type }), name);

    var a = $("<a style='display: none;'/>");
    var url = window.URL.createObjectURL(new Blob([data], {type: type}));
    a.attr("href", url);
    a.attr("download", name);
    $("body").append(a);
    a[0].click();
    setTimeout(function(){  // fixes firefox html removal bug
        window.URL.revokeObjectURL(url);
        a.remove();
    }, 500);  
}