javascript - 嵌套的 JSON 数组和 D3JS

标签 javascript arrays json d3.js

我正在尝试使用嵌套的 json 数组通过 d3.js 绘制多系列图表。我在这个网站和其他网站上看了很多地方,虽然有类似的主题,但我似乎无法使语法适用于我的特定问题(这是一个简单的问题)。

要制作折线图(就像这里的:http://bl.ocks.org/mbostock/3883245),我可以解析这个 JSON 文件:

[{"date":"1-May-12","close":58.13},{"date":"30-Apr-12","close":53.98},{"date":"27-Apr-12","close":67}]

通过使用这个 javascript 语法:

d3.json("data/data2.json", function(error, data) {              
data.forEach(function(d) {                              
    d.date = parseDate(d.date);                         
    d.close = +d.close;                                 
});

但是如果 JSON 是嵌套数组呢?例如:

{
"Stock01":[{"date":"1-May-12","close":58.13},{"date":"30-Apr-12","close":53.98},{"date":"27-Apr-12","close":67}]
"Stock02":[{"date":"1-May-12","close":28.13},{"date":"30-Apr-12","close":33.98},{"date":"27-Apr-12","close":47}]
}

我已经尝试过像下面的脚本这样的选项,但我没有任何运气:

d3.json("data/data2.json", function(error, data) {              
data.forEach(function(d) {                              
    d.date = parseDate(d[0].date);                          
    d.close = +d[0].close;                                  
});

如果有人对如何使用 data.forEach 函数导航嵌套的 JSON 数组有建议,我将不胜感激。在此先感谢您的帮助。

最佳答案

你想遍历数据中的键,使用键在数据中查找对应的值,并对值进行操作。

你想要这样的东西:

d3.json("data/data2.json", function(error, data) {
    for (k in data) {
        var k_data = data[k];
        k_data.forEach(function(d) {                              
            d.date = parseDate(d[0].date);                          
            d.close = +d[0].close;                               
        });
    }
});

此外,forEach 似乎接受一个具有两个参数的函数,keyvalue:

forEach: function(f) {
  for (var key in this) {
    if (key.charCodeAt(0) === d3_map_prefixCode) {
      f.call(this, key.substring(1), this[key]);
    }
  }
}

例如:

values: function() {
  var values = [];
  this.forEach(function(key, value) {
    values.push(value);
  });
  return values;
}

后来:AmeliaBR 关于 forEach 的说法是正确的:它不可用于对象/字典。

var a = {"stock1": [1, 2, 3, 4], "stock2": [2, 3, 5, 7], "stock3": [1,2, 4,8]};
a.forEach(function(value, key){ console.log(value, key);});
/* TypeError: Object #<Object> has no method 'forEach' */

但这行得通:

a["stock1"].forEach(function(value, key){ console.log(value, key);});
1 0
2 1
3 2
4 3

关于javascript - 嵌套的 JSON 数组和 D3JS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21033609/

相关文章:

java - Junit测试错误

java - 如何将数组中的项目添加到 SortedSet 中?

c++ - 广度优先搜索找不到正确的路径

java - 使用java将java字符串转换为geojson

javascript - SoundCloud Api - 如何制作(设置)播放列表收藏夹?

javascript - Angular.js 停止执行(可能是一般 JavaScript 错误)

javascript - 自定义 javascript 类和私有(private)变量作用域问题

javascript - 如果 URL 中有这些词,则隐藏 div

json - 如何在 JMeter HTTP 请求中更改 Post Body 的内容

python - 将嵌套的 Json 转换为 Python 对象