以简单格式获取顶点属性信息

时间:2017-12-19 05:32:10

标签: json gremlin graphson

我们说我有两个节点' A'和' B'在图表中,每个节点都有' name' (字符串)和' roll-no' (int)属性。如何编写查询以获取以下格式的节点属性信息。请注意,我不需要输出中的数据类型信息和嵌套的json结构。

[{name=[apple], roll-no=[10,20]}, {name=[mango], roll-no=[30]}]

我想我正在询问如何将GraphSON转换为普通JSON。

1 个答案:

答案 0 :(得分:3)

您可以project()将该元素转换为Map

gremlin> g.V(1).project('name','age').by('name').by('age')
==>[name:marko,age:29]

正如您所看到的,采用这种方法可以控制在by()步调制器中控制属性时,以更精细的方式生成地图的方式。如果返回的顶点没有同质属性键,则需要以某种方式解释 - 这里有一种可能性:

gremlin> g.V().project('name','age').
......1>   by('name').
......2>   by(coalesce(values('age'),constant('none')))
==>[name:marko,age:29]
==>[name:vadas,age:27]
==>[name:lop,age:none]
==>[name:josh,age:32]
==>[name:ripple,age:none]
==>[name:peter,age:35]

如果不使用项目,您可能也会这样做:

gremlin> g.V().local(properties().group().by(key()).by(value()))
==>[name:marko,age:29]
==>[name:vadas,age:27]
==>[name:lop,lang:java]
==>[name:josh,age:32]
==>[name:ripple,lang:java]
==>[name:peter,age:35]

不像project()那样清晰,并且会获得通常不鼓励的所有属性,但显然这种方法会起作用。我猜您可以逐项列出属性,如下所示:

gremlin> g.V().local(properties('name','age').group().by(key()).by(value()))
==>[name:marko,age:29]
==>[name:vadas,age:27]
==>[name:lop]
==>[name:josh,age:32]
==>[name:ripple]
==>[name:peter,age:35]