d3.js强制布局图:将字符串解析为链接数组

时间:2014-05-19 14:17:04

标签: json d3.js vaadin force-layout

我指的是这个例子:http://bl.ocks.org/mbostock/1153292, 特别是对这些美丽的代码行:

var links = [
  {source: "Microsoft", target: "Amazon", type: "licensing"},
  ...
  {source: "Nokia", target: "Qualcomm", type: "suit"}
];

var nodes = {};

// Compute the distinct nodes from the links.
links.forEach(function(link) {
  link.source = nodes[link.source] || (nodes[link.source] = {name: link.source});
  link.target = nodes[link.target] || (nodes[link.target] = {name: link.target});
});

我想知道这里有什么数据格式'var links',以及我将如何解析以下java字符串(内容基本相同)

String someLinks = "[{source: \"Microsoft\", target: ... }, ...]"

上面的内容与上面的javascript 'var links'相同,然后我可以从中创建图表。

我试过

var links = JSON.parse( string ); 

但这不起作用... 'var links'似乎不是JSON? 编辑:或者我应该使用不同的java格式,例如某种阵列? (不一定是字符串)

2 个答案:

答案 0 :(得分:1)

String someLinks中的值无效JSON。它缺少属性名称的引号。 JSON比javascript本身更迂腐。

JSON.parse('[{"source":"A"},{"source":"B"}]')

可行(请注意"周围的source

此外,你应该避免编写"协议"用手。如果您需要在javascript中构建JSON字符串,可以使用

JSON.stringify([{source:'A'},{source:'B'}])

请注意JSON,例如出于安全原因,也会逃离/。像这样的疏忽很快就会以错误或更糟的方式结束。

答案 1 :(得分:0)

我相信这是字符串中的JSON。由于JSON只是JavaScript,因此您可以简单地“运行”代码来创建相应的数据结构。所以试试

var links = eval(someLinks)

即使我怀疑如果我们退后一步,事情可能会有所不同,你首先不需要eval(因为它通常被认为是不好的风格)