VelocyPack VPackParser从toJson方法返回null _key

时间:2017-02-20 01:56:13

标签: java arangodb

我在名为test的集合中有以下文档:

[
  {
    "_key": "2469",
    "_id": "test/2469",
    "_rev": "_Ujegqfu---",
    "fieldName": "some value"
  }
]

我使用以下两种方法检索此内容:

public Result helloWorldJson() {

    ArangoDB db = new ArangoDB.Builder().user("<user>").password("<pass>").build();
    VPackParser parser = new VPackParser() ;

    VPackSlice slice = db.db("<db>").collection("test").getDocument("2469", VPackSlice.class);      
    String json = db.db("cms").collection("test").getDocument("2469", String.class);

    return Results.text().render("{velocy: " + parser.toJson(slice, true) + ", json: " + json);
}

产生此输出:

{velocy: {"_key":"2469","_id":null,"_rev":"_Ujegqfu---","fieldName":"some value"}, json: {"_key":"2469","_id":"test\/2469","_rev":"_Ujegqfu---","fieldName":"some value"}

VPackParser是故意离开_id null还是我遗漏了什么?

1 个答案:

答案 0 :(得分:2)

存储文档中的_id字段来自特殊的velocypack类型,Json不支持该类型,并且包含文档存储的collection-id。 要在人类可读的&#34;集合名称/文档密钥&#34;中正确地反序列化该字段。反序列化过程需要知道给定collection-id的collection-name。只有当进程可以调用数据库或java驱动程序的内部集合高速缓存时,才可以执行此操作。只有在调用getDocument(String,Type)或其他API方法时,反序列化过程才能访问此方法。 VPackParser是一个独立的Velocypack&lt; - &gt; Json解析器,无法解析字段_id

String json = db.db("cms").collection("test").getDocument("2469", String.class);

与您的通话一样,当您将type设置为String时,会使用toJson()实例上的方法VPackParser,该方法可以访问数据库和收集 - 缓存,因此可以在将velocypack解析为json时正确地对字段_id进行干扰。

如果您想要从api调用中单独反序列化Velocypack(正确解析_id),您可以使用从ArangoUtil util()上获得的类ArangoDB ArangoDatabase 1}},ArangoCollectionVPackSlice slice = db.db("<db>").collection("test").getDocument("2469", VPackSlice.class); String json = db.util().deserialize(slice, String.class);

{{1}}