2012-09-19 156 views
3

我已经使用d3的force.js来进行可视化。将json文件加载到d3.js

以下是充满JS的片段:

d3.json("test.json", function(json) { 
    force.nodes(json.nodes) 
     .links(json.links) 
     .start(); 
}); 

的test.json文件目前在相同的位置,该js文件的。它工作正常。 这些文件位于我的网络应用程序的“网页”文件夹内。如果我使用http url“http:// localhost:8084/FMS/faces/pages/test.json”替换“test.json”,它可以正常工作。 但是,如果我使用“/Users/subashbasnet/test.json”,即文件的路径代替“test.json”,它不起作用。

如果我将json输出设置为var并使用它来代替“test.json”,它将无法工作。 如:

var myjson = "{"nodes":[{"name":"MYriel","group":1},{"name":"Labarre","group":2}],"links":[{"source":1,"target":0,"value":1}]}"; 
    d3.json(myjson, function(json) { 
     force.nodes(json.nodes) 
      .links(json.links) 
      .start(); 
    }); 

我.jsp文件有以下的输出:

<html> 
<head></head> 
<body> 
<pre>{"nodes":[{"name":"MYriel","group":1},{"name":"Labarre","group":2}],"links":[{"source":1,"target":0,"value":1}]}</pre> 
</body> 
</html> 

我怎么想加载<pre>标签内的JSON代替 “test.json”。

这个问题的解决方案非常值得期待。 在此先感谢。

回答

2

如果您'在您的JSP中生成数据,然后您可以简单地执行它

<script>var theData = (<%= unquotedJsonData %>);</script> 

其产生的JS对象,而不是直接JSON字符串

<script>var theData = ({"nodes":[...]});</script> 

那你还不需要使用D3的JSON解析器,只是做

force.nodes(theData.nodes).... 
+0

感谢Roberts..it工作jst fine –

+0

@SubashBasnet如果这个答案解决了你的问题,请考虑_accepting_它通过点击左边的绿色勾号标记。如果他们看到你会接受有用的答案,人们会更愿意回答你未来的问题。 –

0

使用单引号引用您的JSON字符串

var myjson = '{"nodes":[{"name":"MYriel","group":1},{"name":"Labarre","group":2}],"links":[{"source":1,"target":0,"value":1}]}'; 

或转义双引号

var myjson = "{\"nodes\":[{\"name\":\"MYriel\",\"group\":1},{\"name\":\"Labarre\",\"group\":2}],\"links\":[{\"source\":1,\"target\":0,\"value\":1}]}"; 

你的JSP文件只需要输出JSON字符串

{"nodes":[{"name":"MYriel","group":1},{"name":"Labarre","group":2}],"links":[{"source":1,"target":0,"value":1}]}