【问题标题】:Loading json data to an array in d3将json数据加载到d3中的数组
【发布时间】:2016-07-11 09:01:30
【问题描述】:

所以我试图将 json 数据分配给 d3 中的数组变量。

这是我的 json:

[
{
    "Impressions": "273909",
    "Clicks": "648",
    "CPM": 4.6388278388278,
    "Cost": 1266.4,
    "CPC": 1.9543209876543,
    "Campaign": "Campaign 1"
},
{
    "Impressions": "974408",
    "Clicks": "14571",
    "CPM": 4.0175975359343,
    "Cost": 3913.14,
    "CPC": 0.26855672225654,
    "Campaign": "Campaign 2"
},
{
    "Impressions": "76751",
    "Clicks": "5022",
    "CPM": 8.4675,
    "Cost": 643.53,
    "CPC": 0.1281421744325,
    "Campaign": "Campaign 3"
},

这是我加载 json 数据集的代码:

d3.json("DS003a_Adwords_AdPerformance_modified.json", function(error, data) {



var topData = data.sort(function(a, b){
    return d3.descending(+a.cost, +b.cost);
}).slice(0,10);

topData.forEach(function (d) {
    d.CampaignName = d.Campaign;
    d.cost = d.Cost;
});

var cost = d3.nest()
            .key(function(d) {return d.Cost;})
            .entries(data);  //fail


var p = d3.select("body").selectAll("p")
  .data(topData)
  .enter()
  .append("p")
  .text(function(d,i){
    return (i+1) + ". " + d.CampaignName + " cost = " + cost[i];
  });

我基本上想将“Cost”的值保存到数组变量var cost。 但是当我尝试我的代码时,结果如下:

我该怎么办?

谢谢,感谢您的帮助:)

【问题讨论】:

  • 您应该将代码作为文本提供给我们,而不是屏幕截图。
  • 已编辑,谢谢。
  • cost[n] 是一个对象。写一个console.log(cost[n]) 并显示它的所有值。然后你必须像这样访问它:cost[n].VALUEcost[n]['VALUE']
  • 我想说的是,我找不到您使用 Nest 的充分理由,因为该活动是独一无二的,而且成本也是独一无二的。是出于某种目的吗?如果您不嵌套,那么它是一个简单的球类游戏,这就是工作小提琴。 plnkr.co/edit/492ZwYhFPnLRxn0sniNl?p=preview
  • 不,它没有 d3.nest 用于分组。

标签: javascript arrays json d3.js data-visualization


【解决方案1】:

您不能使用nest 直接拥有一个值数组。嵌套的两种可能的输出格式是:

  • 一个大物体

    { 
     key1: value1, 
     key2: value2,
     ...
    }
    
  • 或一组小对象

    [ 
     { key: key1, values: value1 },
     { key: key2, values: value2 }, 
     ...
    ]
    

也不是你想要的。 (记住嵌套的第一个目标:识别一组键,并将具有相同键的所有数据段分组到一个批次中,可能需要进行一些转换)。

如果由于某种原因您不想按照 cmets 中的建议使用原始数组,那么您需要的是 d3.map

var cost = d3.map(data, function(d) {
   return d.cost;
});

这是创建成本数据的副本(如果您的数据数组发生更改,那么您将需要再次运行 d3.map 以更新您的数组)。因此,如果您的数据可能不是恒定的,则应仅在本地使用此数组。这就是为什么通常人们更喜欢直接使用原始数据的原因,因为它还节省了这个复制步骤,并且以后出现棘手错误的风险也更小。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-10
    • 1970-01-01
    • 2015-07-04
    • 1970-01-01
    • 1970-01-01
    • 2015-11-29
    • 2021-11-17
    • 2014-12-29
    相关资源
    最近更新 更多