nebula-go 解析返回数据的问题

  • nebula 版本:v2-ga
  • 部署方式 单机
  • 是否为线上版本: N

hello

假如我有以下TAG (在studio中操作):

CREATE TAG user(name string, username string);

然后插入顶点:

INSERT VERTEX user(name, username) VALUES '001':('小明', 'xiaoming');

然后查询:

FETCH PROP ON user '001' YIELD user.name, user.username;

查询结果如下:

{
  "code": 0,
  "data": {
    "headers": [
      "VertexID",
      "user.name",
      "user.username"
    ],
    "tables": [
      {
        "VertexID": "001",
        "user.name": "小明",
        "user.username": "xiaoming"
      }
    ],
    "timeCost": 1820
  },
  "message": ""
}

接着,我用 nebula-go 来做,查询代码如下:

    query := "use test;FETCH PROP ON user '001' YIELD user.name, user.username;"
    res, err := nebula.Session.Execute(query)

	if err != nil {
		fmt.Print(err.Error())
		return
	}

	if !res.IsEmpty() {
		r, e := res.MarshalJSON()
		if e != nil {
			fmt.Print("error:", e.Error())
		}
		println(string(r[:]))
	}

最终打印结果为:

{"column_names":["VmVydGV4SUQ=","dXNlci5uYW1l","dXNlci51c2VybmFtZQ=="],"rows":[{"values":[{"sVal":"MDAx"},{"sVal":"5bCP5piO"},{"sVal":"eGlhb21pbmc="}]}]}

都是id之类的东西,数据结构也跟studio里的不一样,不是我想要的数据,我该怎么得到想要的数据 ?

不知道是代码不对还是数据不对。

我不知道该怎么解析nebula-go响应的数据。目前我没有看到 nebula-go 的使用文档,但我看源码里封装的方法挺多的。

希望有个文档说明一下,不然别人都不知道怎么用。

看着是编码的问题,你打印的时候指定下string的编码方式为 utf8 再看下结果。或者你可以换其他的接口打印,直接打印res

你好,抱歉给你带来困惑,MarshalJSON() 本来是提供给内部使用的一个借口,里面的结构需要递归地用base64去decode成字符串,但后来没有被用到,这个接口会被移除。

关于结果的解析可以参考 example // Extract data from the resultSet 的部分

另外感谢你的反馈,虽然在源码中我们都对各个函数有注释说明,不过在解析结果方面确实没有提供很详尽的例子,近期会加上。

@Aiee 好的,感谢。

我之前写node的,对go和nebula都还不是很熟。

这里我怎么才能解析为和studio里那样的json结果,希望能提供下样例代码。

参考 nebula-http-gateway/dao.go at master · vesoft-inc/nebula-http-gateway · GitHub

感觉要做的事情挺多的,没有直接封装好的方法吗

现在没有支持,然后服务端是有直接返回json的接口的,只是还没实现,后面会实现,这样到时候直接拿到的结果就是json字符串了,不用每个客户端自己去转,格式统一。目前你可以直接拷贝nebula-http_gateway 的处理代码用。

好的,谢谢

请问nebula-java有类似的解析方法吗

没有,你直接用java的json 库自己组装一下。