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

Json 以简单格式获取顶点属性信息,json,gremlin,graphson,Json,Gremlin,Graphson,假设在图中有两个节点“A”和“B”,每个节点都有“name”(字符串)和“roll no”(int)属性。如何编写查询以获得以下格式的节点属性信息。请注意,我不需要输出中的数据类型信息和嵌套json结构 [{name=[apple], roll-no=[10,20]}, {name=[mango], roll-no=[30]}] 我想我是在问如何将GraphSON转换为普通JSON。您可以project()将元素转换为映射: gremlin> g.V(1).project('name',

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

[{name=[apple], roll-no=[10,20]}, {name=[mango], roll-no=[30]}]
我想我是在问如何将GraphSON转换为普通JSON。

您可以
project()
将元素转换为
映射:

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]
如果不使用project,您也可以执行以下操作:

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]

我用的是tinkerpop3。忘了提一下。它适用于单个节点,但不适用于多个节点。g、 V().project('name','age')。by('name')。by('age')将适用于多个顶点,但您必须考虑可能没有特定属性的顶点。更新了一点我的答案。
project()
如果需要考虑缺少的属性,这很好,否则我只会使用
valueMap(“name”,“age”)
<代码>属性(…).group().by(…)
在我看来有点过于复杂。
valueMap()
在这种情况下不起作用。问题是如何摆脱地图中的底层多属性包装。