2013-03-05 138 views
2

我已將Java HashMap作爲JSON傳遞給客戶端。 所得JSON如下:如何將JSON轉換爲javascript數組?

{ 
    "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時間戳X 1000

(Flot中的時間序列支持基於Javascript時間戳,即無論何時預期或移交時間值,都使用Javascript時間戳編號。這是一個數字,不是Date對象。Javascript時間戳是th自1970年1月1日00:00:00 UTC以來的毫秒數。這與Unix時間戳幾乎相同,除非它以毫秒爲單位,所以請記住乘以1000!)

如何轉換它?任何人都可以親切指導。 :(

+3

你試過anyt興? – Blender 2013-03-05 07:04:49

+0

我試過這樣做:hashMap.entrySet()。toArray();沒有工作 – LittleLebowski 2013-03-05 07:07:37

回答

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/

+0

爲什麼你乘「日期(鍵)* 100」? – 2013-03-05 07:45:32

+0

@some_coder - 因爲你必須乘以100來匹配OP的預期結果。 – 2013-03-05 07:51:48

+0

這就像一個魅力。非常感謝@Derek。我對你的內部評論肯定有點尷尬,但把它當作建設性的批評。我應該更努力地嘗試。謝謝你指導我! – LittleLebowski 2013-03-05 07:53:13

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); 
}