2013-10-31 41 views
0

請幫我將下面的字符串轉換爲實際數據。d3 - 將字符串轉換爲實際值

 

    [ 
     { 
     "key": "model1", 
     "values": [ 
      "[1001874600000,16]", 
      "[1001961000000,11]", 
      "[1002047400000,14]", 
      "[1002133800000,19]" 
     ] 
     }, 
     { 
     "key": "model2", 
     "values": [ 
      "[1001874600000,14]", 
      "[1001961000000,18]", 
      "[1002047400000,14]", 
      "[1002133800000,12]" 
     ] 
     }, 
     { 
     "key": "model3", 
     "values": [ 
      "[1001874600000,14]", 
      "[1001961000000,13]", 
      "[1002047400000,11]", 
      "[1002133800000,20]" 
     ] 
     }, 
     { 
     "key": "model4", 
     "values": [ 
      "[1001874600000,11]", 
      "[1001961000000,11]", 
      "[1002047400000,17]", 
      "[1002133800000,11]" 
     ] 
     } 
    ] 

我用下面的函數將平面數據轉換爲上面的格式。

 

    d3.csv("data.csv", function(data) { 
     data.forEach(function(d){ 
      d.count = +d.count; 
      d.date = Date.parse(d.date); 
     }); 

     var nest = d3.nest() 
      .key(function(d) {return d.model;}) 
      .rollup(function(v) {return v.map(function(d) {return "[" + d.date + "," + d.count + "]";})}) 
      .entries(data) 



     d3.select('body').append('pre') 
        .text(JSON.stringify(nest, null, ' ')); 
     }); 

現在我只需要在值字段中刪除雙引號。有人請幫助我,我沒有任何線索如何做到這一點。

幫助會很高興。

在此先感謝。

回答

0

我知道,eval是邪惡的,但你可以用它來你的字符串轉換成列表,像這樣:

var data = '[1,2,3]'; 
data = eval(data); // returns [1,2,3] 

或者你可以重寫以下return聲明

return "[" + d.date + "," + d.count + "]"; 

像這樣

return [d.date, d.count]; 
+0

夥計 - 非常感謝。這是免費的。再次感謝!! –

+0

@ user2549787不客氣。 :)請點擊勾號按鈕接受我的答案,如果它幫助你。 – aga

+0

它有!再次感謝。 –

0

不完全在主題上,但有任何東西閱讀此應該知道。你應該儘量遠離eval()函數,除非你100%,並且我不能強調足夠的100%,知道傳入的數據(即不是來自另一個源並由你控制)。

以下是一些閱讀材料以幫助提供更多詳細信息(what are the issues javascript eval can pose)。