Java 如何从MySQL获取所需格式的JSON

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

使用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 = 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]
}