1

I am having CORS issues using a csv file to populate a sankey diagram, so I would like to replace it with embedded json for testing purposes. I have reformatted the csv data to get it into the format needed by the d3 sankey plugin, but I can't figure out how to get the javascript to read the json input in place of the csv.

The code I was using to load the csv is as follows:

/ load the data with d3.csv
d3.csv("testinput.csv", function(error, data) {

 graph = {"nodes" : [], "links" : []};

  data.forEach(function (d, i) {
    var item = { source: d.source, target: d.target, values: [] };
    for (var j=0; j < 101; j++) {
      item.values.push(d['value'+j.toString()]);
    }
    portfolioValues.push(item);
    graph.nodes.push({ "name": d.source });
    graph.nodes.push({ "name": d.target });
    graph.links.push({
        source: portfolioValues[i].source,
        target: portfolioValues[i].target,
        value: portfolioValues[i].values[startingAllocation]
    });
  });

  //this handy little function returns only the distinct / unique nodes
  graph.nodes = d3.keys(d3.nest()
           .key(function (d) { return d.name; })
           .map(graph.nodes));

  //it appears d3 with force layout wants a numeric source and target
  //so loop through each link replacing the text with its index from node
  graph.links.forEach(function (d, i) {
      graph.links[i].source = graph.nodes.indexOf(graph.links[i].source);
      graph.links[i].target = graph.nodes.indexOf(graph.links[i].target);
      portfolioValues[i].source = graph.links[i].source;
      portfolioValues[i].target = graph.links[i].target;
  });

  //now loop through each nodes to make nodes an array of objects rather than an array of strings
  graph.nodes.forEach(function (d, i) {
      graph.nodes[i] = { "name": d };
  });

The json I would like to use is:

{
"nodes": [
{"node":1,"name":"AA"},
{"node":2,"name":"BB"},
{"node":3,"name":"XX"},
{"node":4,"name":"YY"}
],
"links": [
{"target":3,"source":1,"value":300},
{"target":4,"source":2,"value":0},
{"target":3,"source":2,"value":0},
{"target":4,"source":2,"value":200}
]}
VividD
  • 10,456
  • 6
  • 64
  • 111
wlf211
  • 23
  • 4

1 Answers1

0

Here is jsfiddle of a Sankey diagram:

enter image description here

json is entirely embedded in javascript, and encapsulated in a function getData().

VividD
  • 10,456
  • 6
  • 64
  • 111