我正在尝试开发一个代表网站页面之间链接的小程序。 我想通过一个关系来表示每个链接,并且每个页面由一个节点来表示。将图形数据转换为Json
现在我使用了一个小数据集,它的样子:
HOME -> PAGE 1 -> PAGE 3 -> PAGE 5
-> PAGE 2 -> PAGE 4
将我所有的节点和关系后,我要遍历以JSON我图形和打印数据有类似:
{
"name": "HOME",
"children": [
{
"name": "PAGE 1",
"children": [
{
"name": "PAGE 3",
"children": [
{"name": "PAGE 5"}
]
},
{
"name": "PAGE 2",
"children": [
{"name": "PAGE 4"}
]
}
]
}
]
}
有没有这样做的功能,或者我必须自己写json?
这里是我的代码:
private static void routing(final GraphDatabaseService graphDb)
{
Transaction tx = graphDb.beginTx();
Page home, p1, p2, p3, p4, p5;
try
{
home = new Page(graphDb, "http://www.site.com/");
p1 = new Page(graphDb, "http://www.site.com/page1.html");
p2 = new Page(graphDb, "http://www.site.com/page2.html");
p3 = new Page(graphDb, "http://www.site.com/page3.html");
p4 = new Page(graphDb, "http://www.site.com/page4.html");
p5 = new Page(graphDb, "http://www.site.com/page5.html");
home.createLinkTo(p1);
home.createLinkTo(p2);
p1.createLinkTo(p3);
p2.createLinkTo(p4);
p3.createLinkTo(p5);
tx.success();
tx = graphDb.beginTx();
final TraversalDescription linkTraversal = Traversal.description().depthFirst().relationships(RelationshipTypes.LINK);
String output = "";
for (Node node : linkTraversal.traverse(home.getUnderlyingNode()).nodes())
{
output += node.getProperty("url") + "\n";
}
System.out.println(output);
}
finally
{
tx.finish();
}
}
Page类
public class Page implements Serializable{
private static final long serialVersionUID = 1L;
static final String URL = "url";
private final Node underlyingNode;
private List<Page> children = null;
public Page(final Node node)
{
this.underlyingNode = node;
}
public Page(final GraphDatabaseService graphDb, final String url)
{
this.underlyingNode = graphDb.createNode();
underlyingNode.setProperty(URL, url);
children = new ArrayList<Page>();
}
public Node getUnderlyingNode()
{
return underlyingNode;
}
public String getUrl()
{
return (String) underlyingNode.getProperty(URL);
}
public void createLinkTo(final Page other)
{
Relationship link = underlyingNode.createRelationshipTo(other.underlyingNode, RelationshipTypes.LINK);
children.add(other);
//link.setProperty(ANCHOR, 'Mon ancre');
}
@Override
public String toString()
{
return "Page [url=" + getUrl() + "]";
}
我更喜欢用JSON来表示一个图表,只需列出节点和边界即可。每个节点都有一个唯一的id(可能是其内部的Neo id),并且边只是简单地表示为起始节点id和末端节点id。使用任何基本的Java JSON库和Neo中的'GlobalGraphOperations'类,您应该可以使用少量代码构建此JSON消息。 – rmlan