2013-11-28 41 views
0

我建立一个饲料,你有帖子,回复等,我试图获得特定饲料(在时间范围内)的受限制的数据集。Neo4j Cypher查询结果序列化在Java

我在Java中调用这个查询,因为我想利用Java核心API进行某些任务,同时可以灵活地使用密码进行更简单的查询。有没有什么办法可以以JSON的形式得到这个直接返回到Web客户端。

START f=node:feeds(name='MY-FEED')          
MATCH (f)<-[:WRITTEN_TO]-(p)<-[:HAS_REPLIED_TO]-(r)<-[:HAS_PUBLISHED]-(ur) 
WHERE p.datetime >= 201311261000 AND p.datetime <= 201311271000  
WITH p,collect({m:r.msg,u:ID(ur),dt:r.datetime})[0..2] as prgroup   
MATCH (pu)-[:HAS_PUBLISHED]->(p)<-[t:HAS_TAGGED]-(),      
()-[l:HAS_LIKED]->(p)            
WITH p,pu,prgroup,collect(t.name) as tags,count(l) as likes  
return {                 
    post:{               
     msg:p.msg,             
     id:ID(p),             
     u:ID(pu),             
     dt:p.datetime,            
     pin:p.pinned,            
     tags:tags,             
     likes:likes             
    },replies:prgroup                              
} as threads              
order by p.pinned desc, p.updated desc          
SKIP 0             
limit 10                 

在Java(只产生错误格式的JSON):

ExecutionResult results = engine.execute(cql); 
List<String> threads = new ArrayList<String>(); 
for (Map<String,Object> row : results) { 
    for (Object val : row.values()) { 
     threads.add(val.toString()); 
    } 
} 
return "["+Joiner.on(",").join(threads)+"]"; 

任何帮助将不胜感激。

回答

2

两行:

Gson g = new GsonBuilder().setPrettyPrinting().create(); 
String json = g.toJson(IteratorUtil.asList(results.iterator())); 
+0

救了我的天! :D:D –