d3 - 将字符串转换为实际值

时间:2013-10-31 08:17:47

标签: javascript d3.js nvd3.js

请帮我将以下字符串转换为实际数据。


    [
      {
        "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, '  '));
        });

现在我只需删除值字段中的双引号。有人请帮助我,我不知道怎么做。

帮助会很高兴。

提前致谢。

2 个答案:

答案 0 :(得分: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];

答案 1 :(得分:0)

不完全是关于主题的,但有些人在阅读此内容时应该注意这一点。你应该保持远离eval()函数,除非你100%,我不能强调100%,知道传入的数据(即不是来自其他来源并由你控制)。

以下是一些有助于提供更多详情的阅读材料(what are the issues javascript eval can pose)。