Ensemble JSON imbriqué et D3JS

J'essaie d'utiliser un ensemble json imbriqué pour graver un graphique multi-séries avec d3.js. J'ai regardé beaucoup d'endroits sur ce site et d'autres, et alors qu'il y a des sujets similaires, je ne peux pas sembler faire fonctionner la syntaxe avec mon problème spécifique (ce qui est simple).

Pour créer un tableau de lignes (comme celui-ci ici: http://bl.ocks.org/mbostock/3883245 ), je peux analyser ce fichier JSON:

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

En utilisant cette syntaxe javascript:

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

Mais que faire si le JSON est un réseau imbriqué? Par exemple:

 { "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}] } 

J'ai essayé des options comme le script ci-dessous, mais je n'ai pas de chance:

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

Si quelqu'un a des conseils sur la façon de naviguer dans un réseau JSON imbriqué avec la fonction data.forEach, je vous en serions reconnaissant. Merci d'avance pour votre aide.

Vous voulez faire itérer sur les clés dans les données, utilisez la touche pour rechercher la valeur correspondante dans les données et utilisez les valeurs.

Vous voulez quelque chose comme ça:

 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; }); } }); 

En outre, il semble que forEach prend une fonction qui comporte deux arguments, une key et une value :

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

Par exemple:

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

Plus tard: AmeliaBR est correct à propos de forEach : il n'est pas disponible pour les objets / dictionnaires.

 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' */ 

Mais cela fonctionne:

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