3

我已将 d3 的 force.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" 。

对任何一个问题的解决方案都非常期待。提前致谢。

4

2 回答 2

2

如果您在 JSP 中生成数据,那么您可以简单地让它完成

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

它直接产生一个 JS 对象而不是一个 JSON 字符串

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

那你就不需要使用d3的json解析器了,直接做

force.nodes(theData.nodes)....
于 2012-09-19T06:50:17.033 回答
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}]}
于 2012-09-19T06:48:39.530 回答