OrientDB将查询结果直接序列化为Json

时间:2015-03-18 17:17:34

标签: java json jackson orientdb

我有一个东方数据库查询,并希望将结果作为json传回。所以我有以下代码:

OSQLSynchQuery<ODocument> q = new OSQLSynchQuery<ODocument>(query);
List<ODocument> result = db.command(q).execute();
return new ObjectMapper().writeValueAsString(result);

但是由于ODocument的序列化导致无限递归(see this SO question),我遇到了问题。

循环列表并将ODocument#toJSON()连接到StringBuffer不是我的首选选项。特别是因为我也有一个案例,我通过&#34;转换&#34;组。导致我想成为json的hashmap。那么json将ODcomument序列化为另一个对象(列表或映射)的一部分是否有一个干净的方法?

1 个答案:

答案 0 :(得分:0)

这肯定不是一个非常好的方式,但这很有效。首先,我遍历结果并构建一个json字符串列表:

List<String> jsonResult = new ArrayList<>();
for (ODocument d : queryResult) jsonResult.add(d.toJSON());

接下来我创建了一个自定义序列化程序,它只是将原始字符串(json)写入缓冲区:

public class RawJsonListJacksonSerializer extends JsonSerializer<List<String>> {
    @Override
    public void serialize(List<String> entries, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException, JsonProcessingException {
        jsonGenerator.writeStartArray();

        for (int i=0; i<entries.size(); i++) {
            jsonGenerator.writeRaw(entries.get(i) == null ? "null" : entries.get(i));
            if (i<entries.size()-1) jsonGenerator.writeRaw(",");
        }

        jsonGenerator.writeEndArray();
    }
}