OrientDB直接序列化一个查询结果到Json
OrientDB serialize a query result directly to Json
我有一个 orient db 查询,想将结果作为 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 不是我的首选选项。特别是因为我也有一个案例,我将 "group by" 结果转换为我也想成为 json 的哈希图。 json 将 ODcomument 序列化为另一个对象(列表或映射)的一部分是否有一种干净的方法?
这肯定不是一个很好的方法,但效果很好。首先,我遍历结果并构建一个 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();
}
}
我有一个 orient db 查询,想将结果作为 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 不是我的首选选项。特别是因为我也有一个案例,我将 "group by" 结果转换为我也想成为 json 的哈希图。 json 将 ODcomument 序列化为另一个对象(列表或映射)的一部分是否有一种干净的方法?
这肯定不是一个很好的方法,但效果很好。首先,我遍历结果并构建一个 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();
}
}