2016-07-11 2 views
0

, поэтому я пытаюсь назначить данные json переменной массива в d3.Загрузка данных 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]; 
    }); 

Я в основном хочу, чтобы сохранить стоимость «Стоимость» переменный массив var cost , Но когда я попытался мой код результат, как следует:

enter image description here

Что я должен делать?

Спасибо, ваша помощь оценили :)

+2

Вы должны указать нам код как текст, а не скриншоты. –

+0

отредактирован, спасибо. – beneditatan

+1

'cost [n]' - это объект. Напишите 'console.log (cost [n])' и отобразите все его значения. Затем вам нужно получить к нему доступ так: 'cost [n] .VALUE' или' cost [n] ['VALUE'] '. – Phil

ответ

0

Вы не можете использовать nest непосредственно иметь массив значений. Два возможных выходных форматов гнезда являются:

  • большой объект

    { 
    key1: value1, 
    key2: value2, 
    ... 
    } 
    
  • или массив небольших объектов

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

Ни это один вы хотите. (Запомните первую цель гнезда: определите набор ключей и сгруппируйте все фрагменты данных одним и тем же ключом в одной партии, возможно, с некоторым преобразованием).

Если по каким-то причинам вы не хотите использовать свой исходный массив, как предложено в комментариях, то d3.map является то, что вы нуждаясь:

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

Это создает копию ваших данных о затратах (если ваш массив данных изменится, то вам понадобится снова запустить d3.map, чтобы обновить ваш массив). Поэтому вы должны использовать этот массив только локально, если ваши данные могут быть не постоянными. Вот почему, как правило, предпочитают использовать исходные данные напрямую, так как он также сохраняет этот шаг копирования и в меньшей степени рискует запутанными ошибками.

+0

ах вау, ладно спасибо :) :) – beneditatan

Смежные вопросы