gremlin:使用gremlin驱动程序在java中获取json响应

uyhoqukh  于 2021-06-27  发布在  Java
关注(0)|答案(1)|浏览(434)

我有以下疑问:

g
    .V("user-11")
    .repeat(bothE().subgraph("subGraph").outV())
    .times(2)
    .cap("subGraph")
    .next()

当我使用 gremlin-python ,我收到以下回复:

{'@type': 'tinker:graph',
 '@value': {'vertices': [v[device-3], v[device-1], v[user-11], v[card-1]],
  'edges': [e[68bad734-db2b-bffc-3e17-a0813d2670cc][user-11-uses_device->device-1],
   e[14bad735-2b70-860f-705f-4c0b769a7849][user-11-uses_device->device-3],
   e[f0bb3b6d-d161-ec60-5e6d-068272297f24][user-11-uses_card->card-1]]}}

它是由查询获得的子图的graphson表示。
我希望使用java和 gremlin-driver 但我不知道该怎么做。
我最好的尝试是:

ObjectMapper mapper = GraphSONMapper.build().version(GraphSONVersion.V3_0).create().createMapper();
Object a = graphTraversalSource
                .V(nodeId)
                .repeat(bothE().subgraph("subGraph").outV())
                .times(2)
                .cap("subGraph")
                .next();
return mapper.writeValueAsString(a);

但这给了我以下错误:

io.netty.handler.codec.DecoderException: org.apache.tinkerpop.gremlin.driver.ser.SerializationException: org.apache.tinkerpop.shaded.kryo.KryoException: Encountered unregistered class ID: 65536

我用的是aws海王星,但我怀疑这会有什么不同,因为我通过它得到了我想要的答案 gremlin-python .
我很感激你能给我的任何帮助!谢谢

mefy6pfw

mefy6pfw1#

如评论中所述
当使用java时,你得到的将是一个真正的修补程序
建议使用graphbinary或graphsonv3d0序列化程序。
GyroOne比较旧,如果没有指定其他序列化程序之一,则可能会导致您看到的错误。
请注意,即使使用其他序列化程序之一,要将图形反序列化为json,也需要使用特定的tinkergraph序列化程序(请参阅本答案末尾的示例)。否则你只会 {} 返回。
但是,对于JavaGremlin客户机,您可能根本不需要生成json。。。。
如果您有一个实际的tinkergraph,您可以对内存子图运行真正的gremlin查询—只需为它创建一个新的遍历源。您也可以使用 graph.io 类将图形写入文件。tinkergraph将包括属性以及边和顶点。
您还可以使用以下语句直接访问tinkergraph对象 a.vertices 以及 a.edges 通过一个具体的例子,如果你有一个查询的形式

TinkerGraph tg = (TinkerGraph)g.V().bothE().subgraph("sg").cap("sg").next();

那你就可以了

GraphTraversalSource g2 = tg.traversal();

Long cv = g2.V().count().next();
Long ce = g2.E().count().next();

或者您可以直接使用以下语句访问tinkergraph数据结构:

Vertex v = tg.vertices[<some-id>]

List properties = tg.vertices[<some-id>].properties()

这实际上意味着您在使用子图时在java客户机中有更多的可用功能。
如果您仍然觉得需要子图的json版本,io引用是一个方便的书签:https://tinkerpop.apache.org/docs/3.4.9/dev/io/#_io_reference
编辑:-为了节省您阅读文档的时间,此代码将把tinkergraph打印为json

mapper = GraphSONMapper.build().
            addRegistry(TinkerIoRegistryV3d0.instance()).
            version(GraphSONVersion.V3_0).create().createMapper();

mapper.writeValueAsString(tg)

相关问题