0

以下の文字列を実際のデータに変換するのを手伝ってください。

    [
      {
        "キー": "モデル1",
        "値": [
          "[1001874600000,16]",
          "[1001961000000,11]",
          "[1002047400000,14]",
          "[1002133800000,19]"
        ]
      }、
      {
        "キー": "モデル2",
        "値": [
          "[1001874600000,14]",
          "[1001961000000,18]",
          "[1002047400000,14]",
          "[1002133800000,12]"
        ]
      }、
      {
        "キー": "モデル3",
        "値": [
          "[1001874600000,14]",
          "[1001961000000,13]",
          "[1002047400000,11]",
          "[1002133800000,20]"
        ]
      }、
      {
        "key": "model4",
        "値": [
          "[1001874600000,11]",
          "[1001961000000,11]",
          "[1002047400000,17]",
          "[1002133800000,11]"
        ]
      }
    ]

以下の関数を使用して、フラットデータを上記の形式に変換しました。

    d3.csv("data.csv", 関数(データ) {
        data.forEach(関数(d){
            d.count = +d.count;
            d.date = Date.parse(d.date);
        });

        var ネスト = d3.nest()
            .key(関数(d) {return d.model;})
            .rollup(function(v) {return v.map(function(d) {return "[" + d.date + "," + d.count + "]";})})
            .entries(データ)



        d3.select('body').append('pre')
                   .text(JSON.stringify(ネスト、ヌル、' '));
        });

ここで、値フィールドの二重引用符を削除する必要があります。誰かがこれで私を助けてください、私はそれを行う方法についての手がかりがありません.

ヘルプは大歓迎です。

前もって感謝します。

4

2 に答える 2

0

正確には本題ではありませんが、これを読んでいる人なら誰でも知っておくべきことがあります。あなたが 100% でな​​い限り、 eval() 関数からできるだけ遠ざける必要があります。私は 100% を十分に強調することはできません。受信データを知っています (つまり、別のソースから来ていて、あなたによって制御されていません)。

詳細を提供するのに役立つ読み物を次に示します(javascript evalが引き起こす可能性のある問題は何ですか)。

于 2013-10-31T21:36:05.917 に答える
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];
于 2013-10-31T08:29:48.647 に答える