使用 nebula java-client 过程中遇到 node 不能转JSON问题

Nebula 数据库版本 2.0.1,nebula-java- client :2.0.0-SNAPSHOT

问题描述:
我链接到nebula 数据库查询 一个节点 并想通过我提供的api接口返回这个节点

我执行的脚本没问题 如下 :

MATCH (a:player {name: "Tim Duncan"}) return a;

我java 程序接收到了 数据结构 如图:

我的代码操作步骤是:

JSON.toJSONString(value.asNode());
ERROR 2146 --- [nio-8090-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is com.alibaba.fastjson.JSONException: write javaBean error, fastjson version 1.2.58, class com.vesoft.nebula.Value, fieldName : value] with root cause
java.lang.RuntimeException: Cannot get field 'bVal' because union is currently set to sVal

我使用的是阿里的fastjson version 1.2.58, 我这个node 是不是不能直接转 ,需要进一步解析后才行转json

是的,需要你根据自己想要的信息去,Node 是对 Vertex 的包装,但是数据其实还是直接引用 Vertex, 所以里面的数据都是 union,字符串都是 binary,你需要通过 Node 的接口一个一个属性加到json对象里面

嗯 其实就是 这块 好像还可以进行一个工具的 封装 昂,就必须 我从 图数据库 查到的结构 要么是点 要么是边 ,针对点 进行解析 得到一个json去重集合,针对边解析 去重得到一个边json集合 ,如果提供这样的接口的话 ,基本上解析这块就不用 我们自己去写了 还能避免不同的解析影响 nebula的性能 ,如何呢

服务端是要支持直接返回json格式的结果的,这块还没做,接口是预留的,加上了,客户端直接拿到的就是json格式的string。你有兴趣的话,欢迎参与nebula-graph该数据返回格式的贡献。

漂亮,那我可以的哈。

你可以看下 https://github.com/vesoft-inc/nebula-common/blob/master/src/common/interface/graph.thrift 里面 binary executeJson(1: i64 sessionId, 2: binary stmt) 的定义,然后在 https://github.com/vesoft-inc/nebula-graph/blob/master/src/service/GraphService.cpp 里面实现这个接口。
你可以把这个 issue Implement executeJson in graphd · Issue #1309 · vesoft-inc/nebula-graph · GitHub 分配给你自己,这样别人就不会和你做重复。

该话题在最后一个回复创建后7天后自动关闭。不再允许新的回复。