2

我已将 Java HashMap 作为 JSON 传递给客户端。生成的 JSON 如下:

{
  "2013-02-27T07:25:35.000+0000": 40,
  "2013-03-01T07:25:35.000+0000": 33,
  "2013-02-26T07:25:35.000+0000": 25,
  "2013-02-23T07:25:35.000+0000": 54,
  "2013-03-03T10:12:59.000+0000": 26,
  "2013-03-02T07:12:59.000+0000": 25
}

但要绘制到 Flot 图表上,我需要以下格式的输入:

[
[1328983200000, 40],
[1328983200000, 33], 
[1328983200000, 25],
[1328983200000, 54],
[1328983200000, 26], 
[1328983200000, 25]
];

其中第一个值是 Unix Timestamp X 1000

(Flot 中的时间序列支持基于 Javascript 时间戳,即在预期或移交时间值的任何地方,都使用 Javascript 时间戳编号。这是一个数字,而不是 Date 对象。Javascript 时间戳是自以来的毫秒数1970 年 1 月 1 日 00:00:00 UTC。这与 Unix 时间戳几乎相同,只是以毫秒为单位,所以记得乘以 1000!)

我怎样才能转换它?任何人都可以指导。:(

4

2 回答 2

2
var list = {
    "2013-02-27T07:25:35.000+0000": 40,
    "2013-03-01T07:25:35.000+0000": 33,
    "2013-02-26T07:25:35.000+0000": 25,
    "2013-02-23T07:25:35.000+0000": 54,
    "2013-03-03T10:12:59.000+0000": 26,
    "2013-03-02T07:12:59.000+0000": 25
}, arr = [];

for (var key in list) {
    arr.push([+new Date(key)*100, list[key]]);  //One simple line of code
}                                               //Keep trying!


console.log(arr);

http://jsfiddle.net/DerekL/F4tst/

于 2013-03-05T07:15:52.853 回答
2

您可以做的是遍历对象,在您拥有的日期之外创建一个 Date 对象,使用 getTime() 方法以毫秒为单位获取时间戳,创建一个新数组,然后将其推送到您的主数组上。这可能不是最好的解决方案,但它会起作用。

假设您的 JSON 对象名为 obj;

var mainArray = [];
for (var x in obj) {
    var tmpDate = (new Date(x)).getTime();
    var smallArray = [tmpDate, obj[x]];
    mainArray.push(smallArray);
}
于 2013-03-05T07:13:30.277 回答