var jsonResponse = '{"businessConnections":{"vo-class":"com.deltavista.dsp.entity.v2_0.datamodel.IBusinessConnections","businessConnection":[{"vo-class":"com.deltavista.dsp.entity.v2_0.datamodel.IBusinessConnection","vo-list-item":"1","sharesPercentage":{"vo-class":"com.deltavista.sdk.datamodel.IDVDecimal","integerPart":"100","precision":"2","fractionPart":"0"},"connectionType":"BENEFICIARY","detailIdentificationEntries":{"vo-class":"com.deltavista.dsp.entity.v2_0.datamodel.IIdentificationEntries","identificationEntry":[{"vo-class":"com.deltavista.dsp.entity.v2_0.datamodel.IIdentificationEntry","vo-list-item":"1","ID":"C55RS116","identificationType":"SEGMENT_NAME"},{"vo-class":"com.deltavista.dsp.entity.v2_0.datamodel.IIdentificationEntry","vo-list-item":"1","ID":"3056621","identificationType":"DE_BWI_ONR"},{"vo-class":"com.deltavista.dsp.entity.v2_0.datamodel.IIdentificationEntry","vo-list-item":"1","ID":"1","identificationType":"SEQUENCE_NUMBER"}]},"detailEntity":{"vo-class":"com.deltavista.dsp.entity.v2_0.datamodel.IEntity","addresses":{"vo-class":"com.deltavista.dsp.entity.v2_0.datamodel.IAddresses","address":{"vo-class":"com.deltavista.dsp.entity.v2_0.datamodel.IAddress","vo-list-item":"1","location":{"vo-class":"com.deltavista.dsp.entity.v2_0.datamodel.ILocation","zip":"14513","street":"Dorfstr.","houseNumber":"10","city":"Teltow","country":"DEU","houseNumberAdd":"Ruhlsdorf"},"contacts":{"vo-class":"com.deltavista.dsp.entity.v2_0.datamodel.IContacts","POBoxes":{"vo-class":"com.deltavista.dsp.entity.v2_0.datamodel.IPOBoxes","POBox":{"vo-class":"com.deltavista.dsp.entity.v2_0.datamodel.IPOBox","vo-list-item":"1","boxLocation":{"vo-class":"com.deltavista.dsp.entity.v2_0.datamodel.ILocation","country":"DEU"}}},"phones":{"vo-class":"com.deltavista.dsp.entity.v2_0.datamodel.IPhones","phone":{"vo-class":"com.deltavista.dsp.entity.v2_0.datamodel.IPhone","vo-list-item":"1","type":"PHONE","number":"03328/474174"}}},"name":"Dimer","firstName":"Christoph","birthDate":{"vo-class":"com.deltavista.cos.vo.IDVDate","content":"19590420"},"type":"MAIN_ADDRESS"}}}},{"vo-class":"com.deltavista.dsp.entity.v2_0.datamodel.IBusinessConnection","vo-list-item":"1","sharesPercentage":{"vo-class":"com.deltavista.sdk.datamodel.IDVDecimal","integerPart":"0","precision":"2","fractionPart":"0"},"connectionType":"BENEFICIARY","detailIdentificationEntries":{"vo-class":"com.deltavista.dsp.entity.v2_0.datamodel.IIdentificationEntries","identificationEntry":[{"vo-class":"com.deltavista.dsp.entity.v2_0.datamodel.IIdentificationEntry","vo-list-item":"1","ID":"C55RS116","identificationType":"SEGMENT_NAME"},{"vo-class":"com.deltavista.dsp.entity.v2_0.datamodel.IIdentificationEntry","vo-list-item":"1","ID":"3056617","identificationType":"DE_BWI_ONR"},{"vo-class":"com.deltavista.dsp.entity.v2_0.datamodel.IIdentificationEntry","vo-list-item":"1","ID":"2","identificationType":"SEQUENCE_NUMBER"}]},"detailEntity":{"vo-class":"com.deltavista.dsp.entity.v2_0.datamodel.IEntity","addresses":{"vo-class":"com.deltavista.dsp.entity.v2_0.datamodel.IAddresses","address":{"vo-class":"com.deltavista.dsp.entity.v2_0.datamodel.IAddress","vo-list-item":"1","location":{"vo-class":"com.deltavista.dsp.entity.v2_0.datamodel.ILocation","zip":"09603","street":"Nordstr.","houseNumber":"4","city":"Großschirma","country":"DEU"},"contacts":{"vo-class":"com.deltavista.dsp.entity.v2_0.datamodel.IContacts","POBoxes":{"vo-class":"com.deltavista.dsp.entity.v2_0.datamodel.IPOBoxes","POBox":{"vo-class":"com.deltavista.dsp.entity.v2_0.datamodel.IPOBox","vo-list-item":"1","boxLocation":{"vo-class":"com.deltavista.dsp.entity.v2_0.datamodel.ILocation","country":"DEU"}}},"phones":{"vo-class":"com.deltavista.dsp.entity.v2_0.datamodel.IPhones","phone":{"vo-class":"com.deltavista.dsp.entity.v2_0.datamodel.IPhone","vo-list-item":"1","type":"PHONE","number":"035242/4660"}}},"name":"Dimer Immobilien Verwaltungsgesellschaft mbH","type":"MAIN_ADDRESS"}}}},{"vo-class":"com.deltavista.dsp.entity.v2_0.datamodel.IBusinessConnection","vo-list-item":"1","sharesPercentage":{"vo-class":"com.deltavista.sdk.datamodel.IDVDecimal","integerPart":"74","precision":"2","fractionPart":"0"},"connectionType":"BENEFICIARY","detailIdentificationEntries":{"vo-class":"com.deltavista.dsp.entity.v2_0.datamodel.IIdentificationEntries","identificationEntry":[{"vo-class":"com.deltavista.dsp.entity.v2_0.datamodel.IIdentificationEntry","vo-list-item":"1","ID":"C55RS116","identificationType":"SEGMENT_NAME"},{"vo-class":"com.deltavista.dsp.entity.v2_0.datamodel.IIdentificationEntry","vo-list-item":"1","ID":"50473321","identificationType":"DE_BWI_ONR"},{"vo-class":"com.deltavista.dsp.entity.v2_0.datamodel.IIdentificationEntry","vo-list-item":"1","ID":"3","identificationType":"SEQUENCE_NUMBER"}]},"detailEntity":{"vo-class":"com.deltavista.dsp.entity.v2_0.datamodel.IEntity","addresses":{"vo-class":"com.deltavista.dsp.entity.v2_0.datamodel.IAddresses","address":{"vo-class":"com.deltavista.dsp.entity.v2_0.datamodel.IAddress","vo-list-item":"1","location":{"vo-class":"com.deltavista.dsp.entity.v2_0.datamodel.ILocation","zip":"09603","street":"Nordstr.","houseNumber":"4","city":"Großschirma","country":"DEU"},"name":"Dimer Immobilien GmbH & Co. KG","type":"MAIN_ADDRESS"}}}},{"vo-class":"com.deltavista.dsp.entity.v2_0.datamodel.IBusinessConnection","vo-list-item":"1","sharesPercentage":{"vo-class":"com.deltavista.sdk.datamodel.IDVDecimal","integerPart":"0","precision":"2","fractionPart":"0"},"connectionType":"BENEFICIARY","detailIdentificationEntries":{"vo-class":"com.deltavista.dsp.entity.v2_0.datamodel.IIdentificationEntries","identificationEntry":[{"vo-class":"com.deltavista.dsp.entity.v2_0.datamodel.IIdentificationEntry","vo-list-item":"1","ID":"C55RS116","identificationType":"SEGMENT_NAME"},{"vo-class":"com.deltavista.dsp.entity.v2_0.datamodel.IIdentificationEntry","vo-list-item":"1","ID":"3045173","identificationType":"DE_BWI_ONR"},{"vo-class":"com.deltavista.dsp.entity.v2_0.datamodel.IIdentificationEntry","vo-list-item":"1","ID":"4","identificationType":"SEQUENCE_NUMBER"}]},"detailEntity":{"vo-class":"com.deltavista.dsp.entity.v2_0.datamodel.IEntity","addresses":{"vo-class":"com.deltavista.dsp.entity.v2_0.datamodel.IAddresses","address":{"vo-class":"com.deltavista.dsp.entity.v2_0.datamodel.IAddress","vo-list-item":"1","identificationEntries":{"vo-class":"com.deltavista.dsp.entity.v2_0.datamodel.IIdentificationEntries","identificationEntry":[{"vo-class":"com.deltavista.dsp.entity.v2_0.datamodel.IIdentificationEntry","vo-list-item":"1","ID":"DE136757339","identificationType":"EU_VAT_NUMBER"},{"vo-class":"com.deltavista.dsp.entity.v2_0.datamodel.IIdentificationEntry","vo-list-item":"1","ID":"3220011402686","identificationType":"EU_TAX_ELSTER_NUMBER"},{"vo-class":"com.deltavista.dsp.entity.v2_0.datamodel.IIdentificationEntry","vo-list-item":"1","ID":"220/114/02686","identificationType":"EU_TAX_NUMBER"}]},"location":{"vo-class":"com.deltavista.dsp.entity.v2_0.datamodel.ILocation","zip":"09603","street":"Nordstr.","geopoint":{"vo-class":"com.deltavista.sdk.datamodel.IDVGeopoint","latitude":{"vo-class":"com.deltavista.sdk.datamodel.IDVDecimal","integerPart":"51","precision":"6","fractionPart":"34535"},"longitude":{"vo-class":"com.deltavista.sdk.datamodel.IDVDecimal","integerPart":"13","precision":"6","fractionPart":"304565"}},"houseNumber":"4","city":"Großschirma","country":"DEU","houseNumberAdd":"ST Siebenlehn"},"contacts":{"vo-class":"com.deltavista.dsp.entity.v2_0.datamodel.IContacts","POBoxes":{"vo-class":"com.deltavista.dsp.entity.v2_0.datamodel.IPOBoxes","POBox":{"vo-class":"com.deltavista.dsp.entity.v2_0.datamodel.IPOBox","vo-list-item":"1","boxLocation":{"vo-class":"com.deltavista.dsp.entity.v2_0.datamodel.ILocation","country":"DEU"}}},"WWWs":{"vo-class":"com.deltavista.dsp.entity.v2_0.datamodel.IWWWs","WWW":{"vo-class":"com.deltavista.dsp.entity.v2_0.datamodel.IContactData","vo-list-item":"1","type":"WWW","contactData":"www.montara.biz"}},"emails":{"vo-class":"com.deltavista.dsp.entity.v2_0.datamodel.IEmails","email":{"vo-class":"com.deltavista.dsp.entity.v2_0.datamodel.IContactData","vo-list-item":"1","type":"EMAIL","contactData":"info@montara.biz"}},"phones":{"vo-class":"com.deltavista.dsp.entity.v2_0.datamodel.IPhones","phone":[{"vo-class":"com.deltavista.dsp.entity.v2_0.datamodel.IPhone","vo-list-item":"1","type":"PHONE","number":"035242/4660"},{"vo-class":"com.deltavista.dsp.entity.v2_0.datamodel.IPhone","vo-list-item":"1","type":"FAX","number":"035242/46642"}]}},"name":"Montara Verpacken mit System GmbH","type":"MAIN_ADDRESS"}}}},{"vo-class":"com.deltavista.dsp.entity.v2_0.datamodel.IBusinessConnection","vo-list-item":"1","sharesPercentage":{"vo-class":"com.deltavista.sdk.datamodel.IDVDecimal","integerPart":"100","precision":"2","fractionPart":"0"},"connectionType":"BENEFICIARY","detailIdentificationEntries":{"vo-class":"com.deltavista.dsp.entity.v2_0.datamodel.IIdentificationEntries","identificationEntry":[{"vo-class":"com.deltavista.dsp.entity.v2_0.datamodel.IIdentificationEntry","vo-list-item":"1","ID":"C55RS116","identificationType":"SEGMENT_NAME"},{"vo-class":"com.deltavista.dsp.entity.v2_0.datamodel.IIdentificationEntry","vo-list-item":"1","ID":"3056621","identificationType":"DE_BWI_ONR"},{"vo-class":"com.deltavista.dsp.entity.v2_0.datamodel.IIdentificationEntry","vo-list-item":"1","ID":"1","identificationType":"SEQUENCE_NUMBER"}]},"detailEntity":{"vo-class":"com.deltavista.dsp.entity.v2_0.datamodel.IEntity","addresses":{"vo-class":"com.deltavista.dsp.entity.v2_0.datamodel.IAddresses","address":{"vo-class":"com.deltavista.dsp.entity.v2_0.datamodel.IAddress","vo-list-item":"1","location":{"vo-class":"com.deltavista.dsp.entity.v2_0.datamodel.ILocation","zip":"14513","street":"Dorfstr.","houseNumber":"10","city":"Teltow","country":"DEU","houseNumberAdd":"Ruhlsdorf"},"contacts":{"vo-class":"com.deltavista.dsp.entity.v2_0.datamodel.IContacts","POBoxes":{"vo-class":"com.deltavista.dsp.entity.v2_0.datamodel.IPOBoxes","POBox":{"vo-class":"com.deltavista.dsp.entity.v2_0.datamodel.IPOBox","vo-list-item":"1","boxLocation":{"vo-class":"com.deltavista.dsp.entity.v2_0.datamodel.ILocation","country":"DEU"}}},"phones":{"vo-class":"com.deltavista.dsp.entity.v2_0.datamodel.IPhones","phone":{"vo-class":"com.deltavista.dsp.entity.v2_0.datamodel.IPhone","vo-list-item":"1","type":"PHONE","number":"03328/474174"}}},"name":"Dimer","firstName":"Christoph","birthDate":{"vo-class":"com.deltavista.cos.vo.IDVDate","content":"19590420"},"type":"MAIN_ADDRESS"}}}},{"vo-class":"com.deltavista.dsp.entity.v2_0.datamodel.IBusinessConnection","vo-list-item":"1","sharesPercentage":{"vo-class":"com.deltavista.sdk.datamodel.IDVDecimal","integerPart":"74","precision":"2","fractionPart":"0"},"connectionType":"BENEFICIARY","detailIdentificationEntries":{"vo-class":"com.deltavista.dsp.entity.v2_0.datamodel.IIdentificationEntries","identificationEntry":[{"vo-class":"com.deltavista.dsp.entity.v2_0.datamodel.IIdentificationEntry","vo-list-item":"1","ID":"C55RS116","identificationType":"SEGMENT_NAME"},{"vo-class":"com.deltavista.dsp.entity.v2_0.datamodel.IIdentificationEntry","vo-list-item":"1","ID":"50473321","identificationType":"DE_BWI_ONR"},{"vo-class":"com.deltavista.dsp.entity.v2_0.datamodel.IIdentificationEntry","vo-list-item":"1","ID":"2","identificationType":"SEQUENCE_NUMBER"}]},"detailEntity":{"vo-class":"com.deltavista.dsp.entity.v2_0.datamodel.IEntity","addresses":{"vo-class":"com.deltavista.dsp.entity.v2_0.datamodel.IAddresses","address":{"vo-class":"com.deltavista.dsp.entity.v2_0.datamodel.IAddress","vo-list-item":"1","location":{"vo-class":"com.deltavista.dsp.entity.v2_0.datamodel.ILocation","zip":"09603","street":"Nordstr.","houseNumber":"4","city":"Großschirma","country":"DEU"},"name":"Dimer Immobilien GmbH & Co. KG","type":"MAIN_ADDRESS"}}}},{"vo-class":"com.deltavista.dsp.entity.v2_0.datamodel.IBusinessConnection","vo-list-item":"1","sharesPercentage":{"vo-class":"com.deltavista.sdk.datamodel.IDVDecimal","integerPart":"0","precision":"2","fractionPart":"0"},"connectionType":"BENEFICIARY","detailIdentificationEntries":{"vo-class":"com.deltavista.dsp.entity.v2_0.datamodel.IIdentificationEntries","identificationEntry":[{"vo-class":"com.deltavista.dsp.entity.v2_0.datamodel.IIdentificationEntry","vo-list-item":"1","ID":"C55RS116","identificationType":"SEGMENT_NAME"},{"vo-class":"com.deltavista.dsp.entity.v2_0.datamodel.IIdentificationEntry","vo-list-item":"1","ID":"3045173","identificationType":"DE_BWI_ONR"},{"vo-class":"com.deltavista.dsp.entity.v2_0.datamodel.IIdentificationEntry","vo-list-item":"1","ID":"3","identificationType":"SEQUENCE_NUMBER"}]},"detailEntity":{"vo-class":"com.deltavista.dsp.entity.v2_0.datamodel.IEntity","addresses":{"vo-class":"com.deltavista.dsp.entity.v2_0.datamodel.IAddresses","address":{"vo-class":"com.deltavista.dsp.entity.v2_0.datamodel.IAddress","vo-list-item":"1","identificationEntries":{"vo-class":"com.deltavista.dsp.entity.v2_0.datamodel.IIdentificationEntries","identificationEntry":[{"vo-class":"com.deltavista.dsp.entity.v2_0.datamodel.IIdentificationEntry","vo-list-item":"1","ID":"DE136757339","identificationType":"EU_VAT_NUMBER"},{"vo-class":"com.deltavista.dsp.entity.v2_0.datamodel.IIdentificationEntry","vo-list-item":"1","ID":"3220011402686","identificationType":"EU_TAX_ELSTER_NUMBER"},{"vo-class":"com.deltavista.dsp.entity.v2_0.datamodel.IIdentificationEntry","vo-list-item":"1","ID":"220/114/02686","identificationType":"EU_TAX_NUMBER"}]},"location":{"vo-class":"com.deltavista.dsp.entity.v2_0.datamodel.ILocation","zip":"09603","street":"Nordstr.","geopoint":{"vo-class":"com.deltavista.sdk.datamodel.IDVGeopoint","latitude":{"vo-class":"com.deltavista.sdk.datamodel.IDVDecimal","integerPart":"51","precision":"6","fractionPart":"34535"},"longitude":{"vo-class":"com.deltavista.sdk.datamodel.IDVDecimal","integerPart":"13","precision":"6","fractionPart":"304565"}},"houseNumber":"4","city":"Großschirma","country":"DEU","houseNumberAdd":"ST Siebenlehn"},"contacts":{"vo-class":"com.deltavista.dsp.entity.v2_0.datamodel.IContacts","POBoxes":{"vo-class":"com.deltavista.dsp.entity.v2_0.datamodel.IPOBoxes","POBox":{"vo-class":"com.deltavista.dsp.entity.v2_0.datamodel.IPOBox","vo-list-item":"1","boxLocation":{"vo-class":"com.deltavista.dsp.entity.v2_0.datamodel.ILocation","country":"DEU"}}},"WWWs":{"vo-class":"com.deltavista.dsp.entity.v2_0.datamodel.IWWWs","WWW":{"vo-class":"com.deltavista.dsp.entity.v2_0.datamodel.IContactData","vo-list-item":"1","type":"WWW","contactData":"www.montara.biz"}},"emails":{"vo-class":"com.deltavista.dsp.entity.v2_0.datamodel.IEmails","email":{"vo-class":"com.deltavista.dsp.entity.v2_0.datamodel.IContactData","vo-list-item":"1","type":"EMAIL","contactData":"info@montara.biz"}},"phones":{"vo-class":"com.deltavista.dsp.entity.v2_0.datamodel.IPhones","phone":[{"vo-class":"com.deltavista.dsp.entity.v2_0.datamodel.IPhone","vo-list-item":"1","type":"PHONE","number":"035242/4660"},{"vo-class":"com.deltavista.dsp.entity.v2_0.datamodel.IPhone","vo-list-item":"1","type":"FAX","number":"035242/46642"}]}},"name":"Montara Verpacken mit System GmbH","type":"MAIN_ADDRESS"}}}}]}}'; var obj = JSON.parse(jsonResponse); var businessConnection = obj.businessConnections.businessConnection; var data={ nodes:[], links:[] }; var name, children, type, position, address; for(var i = 0; i < 4; i++) { if(businessConnection[i].connectionType === "BENEFICIARY") { address = businessConnection[i].detailEntity.addresses.address; //name = address.firstName + " " + address.name; name = i; type = "\uf2bd"; data.nodes.push({ "id": i, "name": name, "lvl": (i+1).toString(), "children": "0", "type": type, "position": businessConnection[i].functionID }); } } // console.log(data.nodes); //90px between 2 elements + 10px free per element var height = data.nodes.length * 100 + 100; var width = data.nodes.length * 100 + 100; addAdditionalNodes(data); setAll(data); prepareLinks(data); var svg = d3.select("body").append("svg") .attr("height", height); var force = d3.layout.force() .nodes(data.nodes) .links(data.links) .size([width, height]) .on("tick", tick) .start(); var link = svg.selectAll(".link") .data(data.links) .enter().append("line") .attr("class", "link"); var g = svg.selectAll(".node") .data(data.nodes) .enter().append("g") .attr("class", function (d) {return "node-" + d.lvl}); g.append("circle") .attr("r","30px" ) .style("fill", function (d) { if(d.lvl[0] !== "0") { return "gray"; } return "transparent"; }); var icon = g.append('text') .data(data.nodes) .attr("dy", "14px" ) .attr("dx", function (d) { if(d.type === "\uf1ad") return "-16px"; else return "-21px"; } ) .attr('font-family', 'FontAwesome') .attr("fill",function (d) { return "#fff";} ) .attr('font-size', "300%" ) .text(function(d) { return d.type}) .style("cursor","default") .style("stroke-width","0px"); var textName = g.append('text') .data(data.nodes) .attr("dy", "42px") .attr("dx", "35px") .attr('font-size', "100%" ) .attr("text-anchor", "middle") .text(function(d) { return d.name.split("_")[0] }) .style("cursor","default") .style("stroke-width","0px"); var textPosition = g.append('text') .data(data.nodes) .attr("class", "position") .attr("lengthAdjust", "spacingAndGlyphs") .attr("textLength", "100") .attr("text-anchor", "middle") .attr("dy", function (d) { if(d.lvl !== "1") return "-5px"; }) .attr("dx", function (d) { if(d.lvl !== "1") return "-95px"; }) .style("cursor","default") .text(function(d) { return d.position}) .style("font-size", "9px") .style("stroke-width","0px") .append('svg:tspan') .style("font-size", "9px") .attr("y", function (d) { if(d.lvl !== "1") return "15px"; }) .attr("x", function (d) { if(d.lvl !== "1") return "-95px"; }) .text(function(d) { return "XX%" }); console.log(data.nodes); console.log(data.links); function tick() { link .attr("x1", function(d) { return d.source.x; }) .attr("y1", function(d) { return d.source.y; }) .attr("x2", function(d) { return d.target.x; }) .attr("y2", function(d) { return d.target.y; }); g .attr("transform", function transform(d) { return "translate(" + d.x + "," + d.y + ")"; }); } function setAll(data) { var distanceX = 150, distanceY = 90, plusY = distanceY, nodes = data.nodes; //set main node nodes[0].fixed = "TRUE"; nodes[0].x = distanceX - 70; nodes[0].y = distanceY; //set rest of nodes for(var i = 1; i < nodes.length; i++) { nodes[i].fixed = "TRUE"; var level = nodes[i].lvl if (level.charAt(0) === "0") { nodes[i].x = distanceX * parseInt(level.charAt(1)) - 70; nodes[i].y = distanceY + plusY; } else { distanceY += 90 nodes[i].x = distanceX * parseInt(level) - 70; nodes[i].y = distanceY; } } } function addAdditionalNodes(data) { var nodes = data.nodes, name, lvl; for(var i = 0; i < nodes.length - 1; i++) { lvl = "0" + nodes[i].lvl.toString() + nodes[i+1].lvl.toString() name = nodes[i].name + "1"; nodes.splice(++i, 0, {"name":name, "lvl": lvl, "children": 0}); } } function prepareLinks(data) { var nodes = data.nodes, links = data.links, src = "", trg = ""; for(var i = 0; i < nodes.length - 1; i++) { src = nodes[i]; trg = nodes[i+1]; links.push({ "source": src, "target": trg }); } }