Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java OrientDB将查询结果直接序列化为Json_Java_Json_Jackson_Orientdb - Fatal编程技术网

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

Java OrientDB将查询结果直接序列化为Json,java,json,jackson,orientdb,Java,Json,Jackson,Orientdb,我有一个orient db查询,希望将结果作为json传回。因此,我有以下代码: OSQLSynchQuery<ODocument> q = new OSQLSynchQuery<ODocument>(query); List<ODocument> result = db.command(q).execute(); return new ObjectMapper().writeValueAsString(result); 但是由于OdoDocument的序列

我有一个orient db查询,希望将结果作为json传回。因此,我有以下代码:

OSQLSynchQuery<ODocument> q = new OSQLSynchQuery<ODocument>(query);
List<ODocument> result = db.command(q).execute();
return new ObjectMapper().writeValueAsString(result);
但是由于OdoDocument的序列化导致无限递归,我有一个问题


循环列表并将ODocumenttoJSON包含到StringBuffer不是我首选的选项。特别是因为我还有一个例子,我将一个groupby结果转换成一个hashmap,我也希望它是json。那么,有没有一种干净的方法可以将ODCOMENT序列化为另一个对象列表或映射的一部分呢?

这肯定不是一种很好的方法,但效果很好。首先,我循环遍历结果并构建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();
    }
}