2017-05-09 49 views
0

所需格式的讀取JSON使用播放Framework 2.0和在這裏不用我的Java代碼:如何從MySQL

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); 

瀏覽了一會兒之後,我曾嘗試使用GSON,導致我下面的輸出:

[[5.0,"Feb 5, 2014"],[6.0,"Feb 6, 2014"],[1.0,"Feb 7, 2014"],[2.0,"May 3, 2017"],[3.0,"May 4, 2017"]] 

由於我取這個數據上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"}] 

OR

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。如果我不走向某個方向,請指導我採取正確的方法。 謝謝。

回答

1

問題是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); 

這將產生所需的輸出:

{ 
    "date": ["Jan","Feb","Mar","April"], 
    "value": [1,2,3,4] 
} 
+1

這和我需要的相同。我完全忘記了hashmaps,並感謝你打開我的第三隻眼睛:D。我要求您爲未來的用戶更正以下行中的拼寫錯誤。再次感謝。 'HashMap > map = new HashMap >();' – Venky

0

而不是返回對象的列表[]創建該類型的

public class ResultHours { 
    public int value; 
    public Date date; 
} 

,然後更新getResultList()的對象;

List<ResultHours[]> resultHours = (List<ResultHours[]>) query.getResultList(); 

我沒有測試過這個,但理論上它應該工作!

+0

是的,我會試試看! – Venky