Java 如何从MySQL获取所需格式的JSON
使用play framework 2.0,下面是我的java代码:Java 如何从MySQL获取所需格式的JSON,java,mysql,json,playframework-2.0,c3.js,Java,Mysql,Json,Playframework 2.0,C3.js,使用play framework 2.0,下面是我的java代码: String queryString="SELECT watchDuration, date(startTime) from SEData"; Query query=JPA.em().createNativeQuery(queryString); List<Object[]> resultHours = (List<Object[]>) query.getResultList(); Gson gson
String queryString="SELECT watchDuration, date(startTime) from SEData";
Query query=JPA.em().createNativeQuery(queryString);
List<Object[]> resultHours = (List<Object[]>) query.getResultList();
Gson gson = new Gson();
String json = gson.toJson(resultHours);
renderJSON(json);
由于我正在获取这些数据以绘制c3.js图形,因此需要以下格式的数据:
json:[{"value":5, "date":"Feb 5, 2014"},{"value":6, "date":"Feb 6, 2014"},{"value":1, "date":"Feb 7, 2014"},{"value":2, "date":"May 3, 2017"},{"value":3, "date":"May 4, 2017"}]
或
json: {
value:[5, 6, 1, 2, 3],
date: ["Feb 5, 2014", "Feb 6, 2014", "Feb 7, 2014", "May 3, 2017", "May 4, 2017"]
}
如何实现MySQL数据库的上述格式?
我怀疑我对Gson的方法是否错误,因为我得到的输出甚至不是我相信的JSON。如果我没有走向正确的方法,请引导我走向正确的方法。
谢谢。不要返回对象[]的列表,而是创建一个键入的对象
public class ResultHours {
public int value;
public Date date;
}
然后更新getResultList()
List resultHours=(List)query.getResultList();
我没有测试过这个,但理论上它应该可以工作 问题是gson不知道调用了什么属性,因此它生成了一个未命名值数组 虽然添加一个新类会简化事情,但对于查询的每个返回类型,一个新类意味着大量无用的类,特别是当它们仅用于编组时 相反,您可以将名称映射到每个属性列表,如下所示
HashMap<String, ArrayList<Object> > map = new HashMap<String, ArrayList<Object> >();
ArrayList<Object> values = new ArrayList<Object>();
ArrayList<Object> dates = new ArrayList<Object>();
for(int i=0; i < list.size(); i++){
values.add(resultHours.get(i)[0]);
dates.add(resultHours.get(i)[1]);
}
map.put("value", values);
map.put("date", dates);
是的,我要试一试!这和我需要的一样。我已经完全忘记了hashmaps,谢谢你打开我的第三只眼:D。我请求你为未来的用户更正下面一行中的打字错误。再次感谢<代码>HashMap map=新建HashMap()代码>
List<ResultHours[]> resultHours = (List<ResultHours[]>) query.getResultList();
HashMap<String, ArrayList<Object> > map = new HashMap<String, ArrayList<Object> >();
ArrayList<Object> values = new ArrayList<Object>();
ArrayList<Object> dates = new ArrayList<Object>();
for(int i=0; i < list.size(); i++){
values.add(resultHours.get(i)[0]);
dates.add(resultHours.get(i)[1]);
}
map.put("value", values);
map.put("date", dates);
{
"date": ["Jan","Feb","Mar","April"],
"value": [1,2,3,4]
}